我见过一个非常奇怪的代码片段,我不太确定我是否理解它:
#include <stdio.h>
int main(char *argc, char **argv)
{
char a[50];
*(char *) (a + 2) = 'b'; // <== THE LINE WHICH CONFUSES ME
printf("value: %c\n", a[2]);
return 1;
}
Run Code Online (Sandbox Code Playgroud)
是不是我们去2个桶进一步将'b'转换为指向b的指针然后取消引用它?
这完全等同于
*(a + 2) = 'b';
Run Code Online (Sandbox Code Playgroud)
演员是不必要的.
它所做的就是在数组中添加两个 - 衰减到指针a
,取消引用结果指针,并将字符分配'b'
给该内存位置.
何时a
是指针,代码a[x]
完全相同*(a + x)
.所以在你的情况下,*(a + 2) = 'b'
完全一样a[2] = 'b'
.