#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;
}
谁能解释清楚这是怎么发生的,为什么会发生
最佳答案
召回:
在 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)." ];
...完全有效的指针算法。
关于c - 数组索引方法一个棘手的案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18165630/