C指针三维数组
我已经通读了很多解释指针概念的文章,但是我无法找到为什么我的代码会给我一个“不兼容指针类型”的警告。希望你们能帮助我C指针三维数组,c,arrays,pointers,C,Arrays,Pointers,我已经通读了很多解释指针概念的文章,但是我无法找到为什么我的代码会给我一个“不兼容指针类型”的警告。希望你们能帮助我 int cube[3][2][4] = {{{1,2,3,4}},{{2,3},{4,6,8,10}},{{3,4,5,6},{6,8,10}}}; int x = 1; int y = 1; int z = 1; int *p = &cube[0][0][0]; int (*vptr)[2][4] = cube[x][y]; //This line throws a w
int cube[3][2][4] = {{{1,2,3,4}},{{2,3},{4,6,8,10}},{{3,4,5,6},{6,8,10}}};
int x = 1;
int y = 1;
int z = 1;
int *p = &cube[0][0][0];
int (*vptr)[2][4] = cube[x][y]; //This line throws a warning, when i compile it.
int (*mptr)[4] = cube[x];
然后我想用指针p、vptr、mptr访问多维数据集[x][y][z]。我试过这个,但不起作用
printf("%d",*(*(*(p+x)+y)+z));
printf("%d",*(vptr+z));
printf("%d",*(*(mptr+y)+z));
我在网上读到,您可以访问如下数组元素:
*(*(array + row) + col)
但是我的代码不起作用。第一个printf抛出一个错误“无效的一元类型参数”,第二个printf无效,但第三个有效。我不明白。如果有人能向我解释这种行为,或者能给我一个解释,我将不胜感激
谢谢你的时间和帮助。
你好,迈克。第一个printf的问题是,
cube
不是指向int数组的指针数组。在内存中,它是一个整数数组。当您将其转换为int*时,编译器将其解释为int数组,确切地说是1D数组。这就是为什么*(*(数组+行)+col)
不起作用的原因
第一个printf语句应该是
printf("%d", *(p + x*2*4 + y*4 + z));
您可能的意思是:
#include <stdio.h>
int main(void)
{
int cube[3][2][4] = {{{1,2,3,4}},{{2,3},{4,6,8,10}},{{3,4,5,6},{6,8,10}}};
int x = 1;
int y = 1;
int z = 1;
int *p = &cube[0][0][0];
int (*vptr)[2][4] = cube;
int (*mptr)[4] = cube[x];
printf("%d\n", *p);
printf("%d\n", *(*(*(vptr+x)+y)+z));
printf("%d\n", *(*(mptr+y)+z));
return 0;
}
不做你想做的事。cube[x][y]
的值具有类型int*
,该类型与声明的vptr
类型不匹配(指针指向类型int
的四元素数组中的两元素数组)
要使用%d
格式说明符和vptr
打印int
值,您可以通过以下任一方式进行访问:
vptr[x][y][z]
或
*(*(*(vptr+x)+y)+z))
查看此链接您的定义int(*vptr)[2][4]=cube[x][y]代码>没有意义。您正在为某个数组分配一个整数。
int (*vptr)[2][4] = cube[x][y];