EG
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 ++对待它的方式不同,我希望看到标准的措辞。
arr[0]
是int [3]
类型,它不是指针。
int (*p)[3]
的类型为int(*)[3]
,意思是指向3个元素的数组。
指针不是数组而数组不是指针。
现在当你将这个2d数组传递给一个函数(或任何发生衰减的情况)时,它会衰减到指向第一个元素int (*)[3]
的指针。
更明确的C
2d数组只是数组的数组。
解剖
arr
是一个数组,每个元素都是3
元素的数组。arr[0]
在大多数情况下(除了sizeof
等)将衰变成指向它包含的第一个元素,这是一个int*
。arr[0][0]
是一个int
。&arr[0]
..猜怎么着?这是int(*)[3]
类型。