我正在阅读K& R编程语言2ed。 在第5.3节(第99页)中:
根据定义,数组类型的变量或表达式的值是数组元素零的地址。
它告诉我们如果我声明一个数组:
int arr[3];
arr的值是数组第一个元素的地址的默认值。
我尝试在gcc中设置一个实验:
int arr[3] = {0, 1, 2};
printf("%p",arr);
输出仍然是数组第一个元素的地址,尽管我已将其更改为0.
为什么?
答案 0 :(得分:1)
那是因为变量arr
是一个指针本身,其地址为{0, 1, 2}
的第一个元素
这相当于这样做:
int a = 0;
int b = 1;
int c = 2;
printf("%p", &a);
%p
打印指针指向的地址。 (我知道,这听起来令人困惑)
答案 1 :(得分:1)
printf
说明符%p
将打印arr
的实际内存地址,其中包含数组第一个元素的值。
以下代码将取消引用指针并打印arr指向的内存locaction中包含的值。
printf("%u\n", *arr);
语法:
printf("%u\n", arr[0]);
如果您感兴趣的话,还会取消引用数组指针。