在 C 中,可以在这样的声明中使用字符串文字:
char s[] = "hello";
或者像这样:
char *s = "hello";
那么有什么区别呢?我想知道在编译和运行时的存储持续时间方面实际发生了什么。
最佳答案
这里的区别在于
char *s = "Hello world";
将 "Hello world"
放入内存的只读部分,并使 s
成为指向它的指针,这样就可以进行任何写入对该内存的操作是非法的。
在做的时候:
char s[] = "Hello world";
将文字字符串放入只读内存并将字符串复制到堆栈上新分配的内存中。从而使
s[0] = 'J';
合法。
关于c - char s[] 和 char *s 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1704407/