在 C 中,可以在声明中使用字符串文字,如下所示:
char s[] = "hello";
或像这样:
char *s = "hello";
那么区别是什么呢?我想知道在存储持续时间方面实际发生了什么,无论是在编译时还是运行时。
这里的区别在于
char *s = "Hello world";
将放置"Hello world"在 内存的只读部分中 ,并创建s一个指向它的指针,使对该内存的任何写入操作都是非法的。
"Hello world"
s
在做的时候:
char s[] = "Hello world";
将文字字符串放入只读内存并将字符串复制到堆栈上新分配的内存。从而使
s[0] = 'J';
合法的。