内存地址

Address of memory

在此代码中,

int a[] = {1, 2, 3, 4, 5};
printf("a = %p, &a = %p\n", a, &a);

打印了 a&a 的相同地址。据我所知,a 是指向数组第 0 个元素的 const 指针。为什么a的地址和它的内容相等?

Why address of a and contents of it are equal?

他们不是。

在大多数情况下,数组类型的变量会衰减为指向第一个元素的指针。于是

printf("1. %p, 2. %p", (void*)a, (void *)&a[0]);

将打印相同的值。

也就是说,数组的地址,与数组首元素的地址相同,因此

 printf("1. %p, 2. %p", (void*)a, (void*)&a);

也打印相同的 。但是,请记住,它们不是同一类型。

  • a,与本例中的&a[0]相同,类型为int *
  • &a,是int *[5]类型,即指向5int个数组的指针。