#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;
}
Run Code Online (Sandbox Code Playgroud)
有人可以清楚地解释这是如何发生的以及为什么
召回:
在C中,方括号[ ]是隐含的*( ... ).
您提供的代码片段中发生的事情并不是明显的指针算法.这一行:
char c = (buff+1)[5];
Run Code Online (Sandbox Code Playgroud)
......相当于以下(按C标准):
char c = *( ( buff + 1 ) + 5 );
Run Code Online (Sandbox Code Playgroud)
...指向数组中的第7个元素(第6个位置)并取消引用它.它应输出9而不是19.
备注:
在关于方括号的注释之后,重要的是要看到以下内容是等效的.
arr[ n ] <=> n[ arr ]
Run Code Online (Sandbox Code Playgroud)
... arr数组在哪里,n是一个数值.一个更复杂的例子:
' '[ "]; i < 0; i++; while ( 1 ); do something awesome (y)." ];
Run Code Online (Sandbox Code Playgroud)
...完全有效的指针算法.
{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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |