首页 > 解决方案 > 数组的第一个元素的地址存储在哪里?

问题描述

我在玩 C,我刚刚发现 a 和 &a 产生相同的结果,即数组第一个元素的地址。通过浏览这些主题,我发现它们只是以不同的方式格式化。所以我的问题是:这个地址存储在哪里?

标签: carrays

解决方案


它不存储在任何地方 - 它是根据需要计算的。

除非它是、 或 一元运算符的操作数sizeof,或者是用于在声明中初始化字符数组的字符串文字,否则“N-element array of”类型的表达式将被转换(“decays”)为输入“pointer to ”,表达式的值就是数组第一个元素的地址。_Alignof&TT

当你声明一个数组时

T a[N];  // for any non-function type T

你在记忆中得到的是

+---+
|   | a[0]
+---+
|   | a[1]
+---+
 ...
+---+ 
|   | a[N-1]
+---+

而已。没有为任何指针实现存储。相反,每当您a在任何表达式中使用时,编译器都会计算a[0]并使用它的地址。


推荐阅读