c - 为什么数组变量的地址与自身相同?

标签 c arrays pointers

<分区>

在 C 中,如果我们有一个像 a[10] 这样的数组,那么 a&a 有相同的指针值(但不是同一类型)。我想知道为什么C要这样设计?

这是为了节省存储 &a 所需的额外空间吗? ... 当您想到 a 永远无法指向任何其他位置这一事实时,这是有道理的,因此存储 &a 是没有意义的。

最佳答案

the fact that a can never point to any other location

但这不是事实。如果 a 是数组,则 a 不会指向任何地方,因为 a 不是指针。给定 int a[42];a 命名一个包含 42 个 int 对象的数组;它不是指向 42 个 int 对象的数组(即 int (*a)[42];)。

&x 为您提供对象 x 的地址;如果 x 是一个数组类型的变量,那么 &x 给你数组的地址;如果不出意外,这与 & 对任何其他对象的行为是一致的。

一个更好的问题是“为什么数组(如 a)在大多数情况下使用时会衰减为指向其初始元素的指针?”虽然我不确定为什么要以这种方式设计语言,但它确实使许多事情的规范变得更加简单,特别是,使用数组的算术实际上与使用指针的算术相同。

关于c - 为什么数组变量的地址与自身相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5982333/

相关文章:

复制 char 指针数组

c - 类Shell程序C

python - 编写我自己的 Linux 发行版

c++ - 如何让我的程序运行得更快?

c - 如何从包含动态创建字符串数组的结构中释放内存?

c - C 中的结构数组类型

php - 搜索数组中的多个值

c++ - C++ 结构体中的指针

c - 确保施工安全

c++ - 如何制作一个容器来容纳任何类型的指针