有人可以向我解释为什么这段代码总是返回数组的第一个元素?(本例中为7):
int a[] = {7,1,3};
printf("%d", *a);
Run Code Online (Sandbox Code Playgroud)
Sou*_*osh 11
首先,让我告诉你,有没有指针数组这里,你已经是一个数组变量,适用于它引用操作.
阵列,(许多其它病例中)作为的操作数使用时*操作员,衰减到的指针数组的第一元素注.所以
printf("%d", *a);
Run Code Online (Sandbox Code Playgroud)
是相同的
printf("%d", *(&(a[0]));
Run Code Online (Sandbox Code Playgroud)
之后,根据printf()要求,
%d转换说明符int因此,它可以正确打印该值.
注意:
引用C11,章节§6.3.2.1,左值,数组和函数指示符,(强调我的)
除非它是运算
sizeof符,_Alignof运算符或一元运算&符的操作数,或者是用于初始化数组的字符串文字,否则将类型为''数组'的数组的表达式转换为类型为''的表达式指向类型''的指针指向数组对象的初始元素,而不是左值.[...]