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

陳 力*_*陳 力 4 c c++ arrays multidimensional-array language-lawyer

例如

int arr[2][3] = ...
Run Code Online (Sandbox Code Playgroud)

类型arr[0]

int (*)[3] // pointer to int[3], which is a pointer. 
Run Code Online (Sandbox Code Playgroud)

要么

int[3] // an array whose size is 3, which is an array. 
Run Code Online (Sandbox Code Playgroud)

谷歌没有告诉我这个问题.

我知道指针和数组是不同的类型(派生类型).

也许C和C++对待它的方式不同,我希望看到标准的措辞.

use*_*738 15

arr[0]int [3]不是指针的类型.

int (*p)[3]是类型的int(*)[3]意思指向3个元素的数组.

指针不是数组而数组不是指针.

现在当你将这个2d数组传递给一个函数(或任何发生衰减的情况)时,它会衰减成指向第一个元素的指针int (*)[3].

C2d数组中更清楚的只是数组数组.

解剖

  • arr是一个数组,每个元素都是一个带3元素的数组.

  • arr[0]在大多数情况下(除了sizeof等)将衰减为指向它包含的第一个元素的指针int*.

  • arr[0][0]是一个int.

  • 最后&arr[0]..猜怎么着?这是类型int(*)[3].