Closed. This question needs details or clarity。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?添加详细信息并通过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";

10-04 14:43
查看更多