给定字符串分配不同内存的原因是什么?

kev*_*mes 1 c memory string pointers char

第一项声明如下

char*str="hello";
Run Code Online (Sandbox Code Playgroud)

在这种情况下,字符串文字存储在只读存储器中.

第二项声明如下

char str[10]="name";
Run Code Online (Sandbox Code Playgroud)

在这种情况下,字符串文字存储在可写存储器中.

为什么分配的内存与两个字符串文字有区别?

Som*_*ude 5

char*str="hello";(应该真的应该const char*str="hello";)的情况下,实际的字符串文字作为数组存储在只读存储器中,并且str只指向它.在第二个示例中,数组存储在全局数据段(对于全局变量)或堆栈(对于本地数据)中,没有指针.

可以这样想:

对于

const char *str = "hello";
Run Code Online (Sandbox Code Playgroud)

你有

+-----+      +-----------+
| str | ---> | "hello\0" |
+-----+      +-----------+

虽然为

char str[] = "hello";
Run Code Online (Sandbox Code Playgroud)

你有

+-----------+
| "hello\0" |
+-----------+