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)
如果有助于理解,*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”的表达式将转换为类型为“''的表达式类型指针''指向数组对象的初始元素,不是左值。[...]