内存地址
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
个数组的指针。
在此代码中,
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
个数组的指针。