数组索引和地址返回相同的值
#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
使用不正确的格式说明符调用未定义的行为)