#include<stdio.h>
int main(void) {
int a[3] = {1,2,3};
printf("\n\t %u %u %u \t\n",a,&a,&a+1);
return 0;
}
现在我不明白为什么 a 和 &a 返回相同的值,这背后的原因和实际应用是什么?&a 的类型是什么,并且我能否使用 &(&a)?
a
是数组的名称,它会衰减为指向该数组第一个元素的指针。 &a
只是数组本身的地址,虽然a
和&a
打印出相同的值,但它们的类型不同。int
的数组的指针,即int (*)[3]
。&(&a)
?&a
是合法的,但&(&a)
则不合法。&a
的类型(仅限C++):#include <typeinfo>
#include <iostream>
int main()
{
int a[]={1,2,3};
std::cout<< typeid(&a).name();
}
附言:
在打印地址时,请使用%p
格式说明符(在printf
中使用不正确的格式说明符会引发未定义行为)。
T
的n个元素的数组,第一个元素的地址类型为“指向T的指针”;整个数组的地址类型为“指向类型为T的n个元素的数组的指针”。 - Prasoon Sauravint i;
,那么你并没有将i
声明为指向int
的指针,但是&i
是一个指向int
的指针 ;) - fredoverflow