我想知道这段代码内部发生了什么?

che*_*shi 2 c arrays printf pointers

我想知道这段代码的内部处理。

char arr[] = "cat";
*arr = 'b';
printf("%s",arr);
Run Code Online (Sandbox Code Playgroud)

这里在这段代码c中数组如何被覆盖b

Output : bat
Run Code Online (Sandbox Code Playgroud)

Sou*_*osh 8

如果有助于理解,*arr则与*(&arr[0])下面的注释相同,即,它引用存储在索引0处的值。

您只是在为其分配一个新值。

图形化:

char arr[] = "cat";
Run Code Online (Sandbox Code Playgroud)

+-------+--------+--------+--------+     
|  c    |   a    |   t    |   \0   |             
+-------+--------+--------+--------+
  arr[0]  arr[1]   arr[2]   arr[3]
Run Code Online (Sandbox Code Playgroud)

之后

*arr = 'b';   // which is practically same as arr[0] = 'b';
Run Code Online (Sandbox Code Playgroud)

+-------+--------+--------+--------+   
|  b    |   a    |   t    |   \0   |             
+-------+--------+--------+--------+
  arr[0]  arr[1]   arr[2]   arr[3]
Run Code Online (Sandbox Code Playgroud)

注意:

引用C11第6.3.2.1章

除非它是运算sizeof符,_Alignof运算符或一元运算&符的操作数,或者是用于初始化数组的字符串文字,否则类型为“ array of type”的表达式将转换为类型为“''的表达式类型指针''指向数组对象的初始元素,不是左值。[...]