指针算术C和铸造

Jer*_*nDD 1 c pointers

我见过一个非常奇怪的代码片段,我不太确定我是否理解它:

#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的指针然后取消引用它?

Set*_*gie 6

这完全等同于

*(a + 2) = 'b';
Run Code Online (Sandbox Code Playgroud)

演员是不必要的.

它所做的就是在数组中添加两个 - 衰减到指针a,取消引用结果指针,并将字符分配'b'给该内存位置.

何时a是指针,代码a[x]完全相同*(a + x).所以在你的情况下,*(a + 2) = 'b'完全一样a[2] = 'b'.