【发布时间】:2017-06-05 17:15:59
【问题描述】:
我正在学习指针和多维数组。
我知道它们是由几个像这样一个接一个排列的子阵列组成的。
int C[3][2][2];
在本例中 C = 800 这是指向 3 整数数组的第一个数组元素的指针。
我不明白解引用如何处理数组。
在正常情况下*C表示获取存储在地址800的值。所以*C = 2
但这里 *C 将是 800。我从逻辑上理解这一点。这是一个指向里面的2整数数组的指针。
但是编译器是怎么理解的呢?内存中其他数组的信息在哪里?
截图来源 - mycodeschool youtube channel
【问题讨论】:
-
编译器知道数组的维度。它不知道它们是否已经衰减为指针。
-
例如,当您编写
&C[1]时,如果sizeof(int)为4,编译器会将其转换为添加(address of C) + 16。 -
如果除了数组之外还声明了一个指针,那么在 900 处只有一个单独的变量。该数组不需要任何其他信息。
标签: c++ c arrays pointers multidimensional-array