可能重复:
What is the difference between char s[] and char *s in C?
这有什么区别:
char arr[] = "Hello, world!";
而且:
char *arr = "Hello, world!";
两个字符串的内存分配在哪里?为什么我无法更改后一个字符串的内容?
答案 0 :(得分:5)
第一个是专门为arr
分配的可写内存,char
是char arr[] = "Hello, world!";
arr[1] = 'i';
的数组。您可以在不调用未定义行为的情况下对其进行修改。这完全合法:
char *parr = "Hello, world!";
parr[1] = 'i'; // Cannot write to read-only memory!
第二个是指向只读字符串的指针。因此,这是未定义的行为:
char *a = "Hello, world!";
char *b = "Hello, world!";
a[1] = 'i';
// b[1] == 'i';
在一些编译器实现中:
{{1}}
无法保证 - 我只是为了让您“直观”地了解为什么未定义行为。