c - 内存地址
问题描述
在这段代码中,
int a[] = {1, 2, 3, 4, 5};
printf("a = %p, &a = %p\n", a, &a);
a
和&a
打印的地址相同。据我所知,a
是指向数组第 0 个元素的 const 指针。为什么a
它的地址和内容是相等的?
解决方案
为什么a的地址和它的内容相等?
他们不是。
在大多数情况下,数组类型的变量衰减为指向第一个元素的指针。因此
printf("1. %p, 2. %p", (void*)a, (void *)&a[0]);
将打印相同的值。
也就是说,数组的地址与数组的第一个元素的地址相同,因此
printf("1. %p, 2. %p", (void*)a, (void*)&a);
也打印相同的值。但是,请记住,它们不是同一类型。
a
,与&a[0]
本例相同,是类型int *
&a
, 的类型为,即指向 5 sint *[5]
数组的指针。int
推荐阅读
- javascript - 错误:提交文档时无法在视图目录中查找视图“索引”
- excel - 在 Excel 中使用 VBA 将一列乘以存储为变量的常量
- javascript - 从组件的 props.children 访问父状态:
- python - 使用 Django 的通用日期视图有一个 404 错误
- javascript - 以最佳、快速和最小的方式检查变量是否存在 JavaScript 和 jQuery
- python - 如何更正python matplotlib图中x标签的顺序
- html - 使用 html 和 css 修复图像网格
- sql - 查询获取非活动用户
- python-3.x - Google 授权:错误 400:redirect_url_mismatch
- amazon-s3 - 使用 s3cmd,我如何在 s3 目录中按“上次修改”日期检索最新文件夹