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

问题描述 投票:4回答:1

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

c++ c arrays multidimensional-array language-lawyer
1个回答
15
投票

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]类型。
© www.soinside.com 2019 - 2024. All rights reserved.