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

BiG*_*YaN 8 c arrays pointers

在C中,如果我们有一个像阵列a[10],然后a&a具有相同的指针值(但不相同的类型).我想知道为什么C这样设计?

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

Jam*_*lis 11

事实上,a永远不能指向任何其他位置

但这不是事实.如果a是数组,a则不指向任何位置,因为a它不是指针.给定int a[42];,a命名一个包含42个int对象的数组; 它不是一个指向42个int对象数组的指针(也就是说int (*a)[42];).

&x给你对象的地址x; if x是一个数组类型变量,然后&x给你数组的地址; 如果没有别的,这与&任何其他对象的行为一致.

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

  • @Mel:声明`int a [42];`声明一个数组.它宣称没有指针.C确实有阵列. (4认同)