有这样的代码:
int tab[14][2];
int (*wskk)[2] = tab; // &tab makes error
int tab2[2];
wskk = &tab2; // tab2 makes error
Run Code Online (Sandbox Code Playgroud)
为什么可以使用一个指针指向两个不同维度的数组?
要了解发生了什么,您必须熟悉一些关键概念:
wskk是"指向2 ints 数组的指针".因此,如果你写的tab是你得到一个指向tab第一行的第一个元素的指针; 该行具有类型int[2],因此指向它的指针具有类型int (*)[2],这正是指针的类型.因此你可以分配tab给wskk,现在指向第一行tab.
你无法分配&tab它,因为它会产生一个指向整个多维数组的指针,这是一个类型int (*)[14][2].
至于第二部分,它甚至更简单:tab2是一个两个ints 的数组,所以它的类型是int[2].如果你通过&运算符得到一个指向它的指针,你会得到一个int (*)[2],这是指针的类型.实际上,它是有道理的:tab2并且一行tab实际上是相同的东西(2 int秒的数组).
您无法分配tab2它,因为tab2衰减到指向其第一个元素的指针,即int *.