e.g。
int arr[2][3] = ...
arr[0]
的类型是
int (*)[3] // pointer to int[3], which is a pointer.
或者
int[3] // an array whose size is 3, which is an array.
谷歌告诉我这个问题。
我知道指针和数组是不同的类型(派生类型)。
也许C和C ++对待它的方式不同,我希望看到标准的措辞。
答案 0 :(得分:15)
arr[0]
的类型为int [3]
,它不是指针。
int (*p)[3]
的类型为int(*)[3]
,意味着指向3个元素的数组。
指针不是数组,数组不是指针。
现在当你将这个2d数组传递给一个函数(或任何发生衰减的情况)时,它 衰减到 指向第一个元素的指针{{1} }。
要更清楚int (*)[3]
2d数组只是数组数组。
解剖
C
是一个数组,每个元素都是一个包含arr
元素的数组。
3
在大多数情况下(arr[0]
等除外)会衰减为指向它所包含的第一个元素的指针sizeof
。
int*
是arr[0][0]
。
最后int
..猜猜怎么着?这是&arr[0]
类型。