数组静态声明中第一个元素的地址

Div*_*vij 9 c

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具有不同的类型.


Nic*_*ius 6

我的C是生锈的,但据我所知,&a是数组开头的地址,由于数组的开头是第一个元素,因此它将与&a [0]完全对应.

再次,生锈与C,所以我会推迟有更好的专业知识的人.