首页 > 解决方案 > 内存地址

问题描述

在这段代码中,

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

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

标签: carraysmemory-address

解决方案


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

他们不是。

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

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

将打印相同的值。

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

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

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

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

推荐阅读