#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和&amp; a返回相同的值,它背后的推理和实际应用是什么?还有什么类型的&amp; a,我也可以做&amp;(&amp; a)?
答案 0 :(得分:10)
现在我不明白为什么a和&amp; a返回相同的值,是什么原因
a
是衰减指向数组第一个元素的数组的名称。
&a
只是数组本身的地址,尽管a
和&a
打印的是相同的值,但其类型不同。
还有什么类型的&amp; a?
指向包含三个int
s的数组的指针,即int (*)[3]
我可以做&amp;(&amp; a)吗?
不,运算符的地址要求其操作数为左值。数组名称是不可修改的左值,因此&a
是合法的,但&(&a)
不合法。
打印类型为&a
(仅限C ++ )
#include <typeinfo>
#include <iostream>
int main()
{
int a[]={1,2,3};
std::cout<< typeid(&a).name();
}
<强> P.S:强>
使用%p
格式说明符打印地址(在printf
中使用不正确的格式说明符调用未定义的行为)