#include<stdio.h>
int main() {
int buff[] = {1,2,3,4,5,6,9,10};
char c = (buff+1)[5];
printf("%d\n",c);//output is 9
return 0;
}
有人可以清楚地解释这是如何发生的以及为什么
答案 0 :(得分:8)
<强>提取强>
在C中,方括号[ ]
隐含*( ... )
。
您提供的代码片段中的内容是不明显的指针算法。这一行:
char c = (buff+1)[5];
...相当于以下(按C标准):
char c = *( ( buff + 1 ) + 5 );
...指向数组中的第7个元素(第6个位置)并取消引用它。它应输出9而不是19。
<强>注:强>
在关于方括号的注释之后,重要的是要看到以下内容是等效的。
arr[ n ] <=> n[ arr ]
...其中arr
是一个数组,n
是一个数值。一个更复杂的例子:
' '[ "]; i < 0; i++; while ( 1 ); do something awesome (y)." ];
......完全有效的指针算法。
答案 1 :(得分:6)
{1, 2, 3, 4, 5, 6, 9, 10};
| |
buff buff+1 = {2, 3, 4, 5, 6, 9, 10} (say buff_1)
|
buff_1[5] = 9