据我所知,它将字符串存储在只读部分,这意味着无法修改内容。如果我尝试像r[0]= 'W'
那样更改它,它会起作用。但如果我像r = "Some text"
那样写它,它会改变内容。为什么呢?
例如:
char *r = "Hello world";
r[0]='J'; // Doesn't work and I understand why.
r="Changed"; // It works. Why? That's the question.
答案 0 :(得分:2)
char *
是指向char的指针。指向char的指针不包含字符串。它只包含存储字符串的内存地址。
在您的示例中,这将创建一个指针,并为其提供字符串文字的内存地址(通常存储在内存的只读部分中的只读字符串):
char *r = "Hello world";
这会尝试更改指针指向的字符串中的第一个字符并因为指针指向内存的只读部分而失败:
r[0]='J';
这不会改变字符串。这是更改指针,以便它现在指向不同字符串文字的内存地址。即使字符串文字是只读的,也可以更改指针本身:
r="Changed";