<分区>
在 C 中,如果我们有一个像 a[10]
这样的数组,那么 a
和 &a
有相同的指针值(但不是同一类型)。我想知道为什么C要这样设计?
这是为了节省存储 &a
所需的额外空间吗? ... 当您想到 a
永远无法指向任何其他位置这一事实时,这是有道理的,因此存储 &a
是没有意义的。
<分区>
在 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/