有这样的代码:指向在阵列
int tab[14][2];
int (*wskk)[2] = tab; // &tab makes error
int tab2[2];
wskk = &tab2; // tab2 makes error
为什么有可能使用一个指针在不同尺寸的两个阵列以指向?
有这样的代码:指向在阵列
int tab[14][2];
int (*wskk)[2] = tab; // &tab makes error
int tab2[2];
wskk = &tab2; // tab2 makes error
为什么有可能使用一个指针在不同尺寸的两个阵列以指向?
要了解发生了什么事情,你必须熟悉一些关键的概念:
wskk
的类型是“指向2个数组的指针”int
s。因此,如果你写tab
你得到一个指向tab
的第一要素,这是它的第一行;该行的类型为int[2]
,因此指向它的指针的类型为int (*)[2]
,这正是指针的类型。因此,您可以将tab
指定为wskk
,该指标现在将指向tab
的第一行。
您无法分配&tab
它,因为你得到一个指针到整个多维数组,这是int (*)[14][2]
类型。
至于第二块,它更简单:tab2
是两个int
s的阵列,所以它的类型是int[2]
。如果你通过&
运算符得到一个指针,你会得到一个int (*)[2]
,这是你的指针类型。实际上,它是有道理的:tab2
和一排tab
实际上是相同的东西(数组为2 int
s)。
您不能分配tab2
它,因为tab2
衰变到一个指向它的第一个元素,即一个int *
。
使数组到指针的转换明确的,它可能会变得更加清晰:
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 int
你是什么意思*不同类型的数组* *? – Dennis
tab是int [14] [2],tab2是int [2] – scdmb
我认为他指的是不同的维数 – Robb