有这样的代码:
int tab[14][2];
int (*wskk)[2] = tab; // &tab makes error
int tab2[2];
wskk = &tab2; // tab2 makes error为什么可以使用一个指针来指向两个不同维数的数组?
发布于 2011-10-01 01:05:44
要理解发生了什么,你必须熟悉一些关键概念:
wskk to an array of 2”因此,如果您编写tab,您将获得一个指向tab的第一个元素的指针,也就是它的第一行;该行的类型为int[2],因此指向它的指针的类型为int (*)[2],这正是您的指针的类型。因此,您可以将tab赋值给wskk,它现在将指向tab的第一行。
不能将&tab赋值给它,因为这会生成一个指向整个多维数组的指针,该数组的类型为int (*)[14][2]。
至于第二部分,它甚至更简单:tab2是一个由两个int组成的数组,所以它的类型是int[2]。如果通过&操作符获得指向它的指针,则会得到一个int (*)[2],这是您的指针的类型。实际上,这是有道理的:tab2和一行tab实际上是相同的东西(一个由2个int组成的数组)。
不能将tab2赋值给它,因为tab2会衰减为指向其第一个元素的指针,即int *。
发布于 2011-10-01 01:01:07
将数组到指针的转换设置为显式,可能会变得更加清晰:
int tab[14][2];
int (*wskk)[2] = &tab[0]; // point at tab[0], which has type array of 2 int
int tab2[2];
wskk = &tab2; // point at tab2, which has type array of 2 inthttps://stackoverflow.com/questions/7613584
复制相似问题