Closed. This question needs details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
2年前关闭。
据我了解,它将字符串存储到只读部分,这意味着内容无法修改。如果我尝试像
例如:
这会尝试更改指针指向的字符串中的第一个字符,但失败,因为指针指向内存的只读部分):
这不会更改字符串。这将更改指针,使其现在指向其他字符串文字的内存地址。即使字符串文字是只读的,指针本身也可以更改:
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
2年前关闭。
据我了解,它将字符串存储到只读部分,这意味着内容无法修改。如果我尝试像
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.
最佳答案
char *
是指向char的指针。指向char的指针不包含字符串。它只包含存储字符串的内存地址。
在您的示例中,这将创建一个指针,并为其提供字符串文字的内存地址(一个只读字符串,最常存储在内存的只读部分中):
char *r = "Hello world";
这会尝试更改指针指向的字符串中的第一个字符,但失败,因为指针指向内存的只读部分):
r[0]='J';
这不会更改字符串。这将更改指针,使其现在指向其他字符串文字的内存地址。即使字符串文字是只读的,指针本身也可以更改:
r="Changed";