类型数组的变量或表达式的值是数组的元素零的地址

时间:2018-05-23 01:37:23

标签: arrays

我正在阅读K& R编程语言2ed。 在第5.3节(第99页)中:

  

根据定义,数组类型的变量或表达式的值是数组元素零的地址。

它告诉我们如果我声明一个数组:

int arr[3];

arr的值是数组第一个元素的地址的默认值。

我尝试在gcc中设置一个实验:

int arr[3] = {0, 1, 2};
printf("%p",arr);

输出仍然是数组第一个元素的地址,尽管我已将其更改为0.

为什么?

2 个答案:

答案 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]);

如果您感兴趣的话,还会取消引用数组指针。