内存地址

时间:2019-05-07 10:13:59

标签: c arrays memory-address

在此代码中,

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

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

1 个答案:

答案 0 :(得分:2)

  

为什么a的地址和它的内容相等?

不是。

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

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],即指向5个int s数组的指针。