c++ - c 和 c++ 中二维数组元素的类型是什么?

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

例如

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 个元素的数组的指针。

指针不是数组,数组也不是指针。

现在,当您将此二维数组传递给函数(或发生衰减的任何情况)时,它会衰减为指向第一个元素的指针,该元素是 int (*)[3].

C 中更清楚,二维数组不过是数组的数组。

剖析

  • arr 是一个数组,每个元素又是一个包含 3 个元素的数组。

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

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

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

关于c++ - c 和 c++ 中二维数组元素的类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48040217/

相关文章:

c - 如何捕获生成的解析器中语法错误的行号

c - 为什么这会导致段错误?

c - 使用结构在学生列表中找到最大的平均值

C++:从文件中读取并显示单个项目

c++ - 逆向工程 C++ - 最好的工具和方法

c++ - 我在 IDA 或 dbg 或 olly 上看到的内存是否与我在 RAM 上实时加载的内存相同?

c - pow 函数给出不需要的结果 c

c++ - 测试 C 字符串是否以后缀结尾的 C++ 函数

c - 将时间值作为用户的输入,并在多个线程中调整等于该时间的延迟

java - 如何从文本字段获取值并将其保存在整数数组中,稍后将其显示在标签中