数组索引和地址返回相同的值

#include 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只是数组本身的地址,尽管a&a打印相同的值,它们的类型不同。

还有什么类型的&a?

指向包含三个int的数组的指针,即int (*)[3]

我也能做&(&a)?

不,运算符的地址要求其操作数为左值。 数组名称是不可修改的左值,因此&a是合法的,但&(&a)不是。

打印类型&a仅限C ++

 #include  #include  int main() { int a[]={1,2,3}; std::cout<< typeid(&a).name(); } 

PS:

使用%p格式说明符打印地址(在printf使用不正确的格式说明符调用未定义的行为)