指着阵列

scd*_*dmb 1 c++

有这样的代码:

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)

为什么可以使用一个指针指向两个不同维度的数组?

Mat*_*lia 5

要了解发生了什么,您必须熟悉一些关键概念:

  • 多维数组是一个数组数组;
  • 数组的名称衰减为指向其第一个元素的指针;
  • 类型wskk是"指向2 ints 数组的指针".

因此,如果你写的tab是你得到一个指向tab第一行的第一个元素的指针; 该行具有类型int[2],因此指向它的指针具有类型int (*)[2],这正是指针的类型.因此你可以分配tabwskk,现在指向第一行tab.

无法分配&tab它,因为它会产生一个指向整个多维数组的指针,这是一个类型int (*)[14][2].

至于第二部分,它甚至更简单:tab2是一个两个ints 的数组,所以它的类型是int[2].如果你通过&运算符得到一个指向它的指针,你会得到一个int (*)[2],这是指针的类型.实际上,它是有道理的:tab2并且一行tab实际上是相同的东西(2 int秒的数组).

无法分配tab2它,因为tab2衰减到指向其第一个元素的指针,即int *.