c和c ++中2d数组元素的类型是什么?

时间:2017-12-31 05:17:04

标签: c++ c arrays multidimensional-array language-lawyer

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 ++对待它的方式不同,我希望看到标准的措辞。

1 个答案:

答案 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]类型。