c - 数组的第一个元素的地址存储在哪里?
问题描述
我在玩 C,我刚刚发现 a 和 &a 产生相同的结果,即数组第一个元素的地址。通过浏览这些主题,我发现它们只是以不同的方式格式化。所以我的问题是:这个地址存储在哪里?
解决方案
它不存储在任何地方 - 它是根据需要计算的。
除非它是、 或 一元运算符的操作数sizeof
,或者是用于在声明中初始化字符数组的字符串文字,否则“N-element array of”类型的表达式将被转换(“decays”)为输入“pointer to ”,表达式的值就是数组第一个元素的地址。_Alignof
&
T
T
当你声明一个数组时
T a[N]; // for any non-function type T
你在记忆中得到的是
+---+
| | a[0]
+---+
| | a[1]
+---+
...
+---+
| | a[N-1]
+---+
而已。没有为任何指针实现存储。相反,每当您a
在任何表达式中使用时,编译器都会计算a[0]
并使用它的地址。
推荐阅读
- zend-framework - 使用 RowGateway 创建行
- android - 如何在android中找到谷歌浏览器的绝对路径
- javascript - Vue.js:在脚本中设置评估/v-bound 属性
- javascript - 将强度点数组转换为标记
- c# - FindObjectOfType 问题
- email - wso2 发送电子邮件 MIME 编码字头“来自”
- android - 如何不在列表视图中显示某些项目
- asp.net - Itextsharp:使用按钮填充图像
- xamarin - 当我删除元素时,layout.children.clear() 和 layout.children.remove() 之间有区别吗?
- php - 当我插入值时,只存储最后一个值