int main()
{
int a[3]={1,10,20};
printf("%u %u %u \n" ,&a,a,&a[0]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这将为所有三个打印相同的值.我明白a和&a [0]是一样的但是怎么也是一样的?
CB *_*ley 17
为了获得最大的兼容性,您应始终使用%p并显式转换void*为打印指针值printf.
当数组的名称在表达式上下文中使用而不是作为操作数sizeof或一元的时,&它会衰减到指向其第一个元素的指针.
这意味着,a与&a[0]具有相同的类型(int*)和值.&a是数组本身的地址所以有类型int (*)[3].阵列对象,其第一元素开始这样的阵列的第一个元素的地址将具有相同的值作为阵列本身虽然表达式的地址&a[0]和&a具有不同的类型.