【发布时间】:2016-10-06 15:28:50
【问题描述】:
我是 C 编程新手,有一个问题困扰着我。 我们来看下面这段代码:
int main()
{
int arr[3]={1,2,3};
printf("%d\n", arr);
printf("%d", &arr);
}
如果我运行此代码,它会为 arr 和 &arr 提供相同的结果。但为什么 arr=&arr? 我已经看到了很多关于这个主题的答案,但我都不清楚。简而言之,人们同意数组变量保存数组第一个元素的地址,例如,arr 保存 arr[0] 的地址,比如 arr= 4340。那么变量 arr 必须存储在内存中的某个位置,并且&arr 是存储值 4340 的内存单元的地址。如果 &arr = arr 则结果是 4340 存储在地址 4340。但是地址 4340 的值是数组的第一个元素的值,所以它应该是1??? 在这一点上我很困惑,非常感谢一些帮助。
【问题讨论】:
-
阅读comp.lang.c FAQ 的第 6 部分。它很好地解释了 C 中数组和指针之间经常令人困惑的关系。(规则 1:数组不是指针。)
-
@Keith Thompson:感谢您的参考!我一定会看的。