const char指针修改

时间:2011-10-11 10:32:24

标签: c string casting

我们可以将一个const char *分配给另一个并修改值吗?

const char * c1; 
const char * c2 = c1; 

以上作业是否有效?

4 个答案:

答案 0 :(得分:2)

const char*表示字符串的内容是常量。你可以有不同的指针引用相同的常量内存。换句话说,指针是具有相同值的不同变量。请记住,指针的值是它所引用的内存的地址。

所以,是的,上面的作业完全有效。


我想知道这个问题是否与您的previous question有关。你在这里说:

  

我们可以将一个const char *分配给另一个并修改值吗?

如果通过“修改值”意味着修改字符串的内容(这是您在上一个问题中想要做的事情),那么不能。在这里给出的示例中,您有两个指针指向相同的常量内存块。如果其中一个指针无法修改该内存,那么另一个指针也无法修改。

答案 1 :(得分:1)

const char*表示指向的字符串是常量。

char const*表示指针本身是常量。

答案 2 :(得分:0)

是的,这完全有效。

A const char *表示指针指向的内容是常量,但它不会停止将指针分配给另一个指针,因为这不会更改原始指针指向的内容。

这为您提供了两个指向相同内存位置的指针。

    |----------|                                 
    |   c1     |                            
    |          |  1000                       
    |   2000   |                             
    |----------|                               
          |                                           
          |
          |
          |
          -------------------->|----------|
                               |   num    |
          -------------------->|          |  2000
          |                    |    2     |     
          |                    |----------|
          |
          |
    |----------|                             
    |   c2     |                            
    |          |  3000                       
    |   2000   |                             
    |----------|    

您可以破解并修改const char *指针的内容,但请注意,修改声明为const的变量会导致未定义的行为

答案 3 :(得分:0)

你已经知道了,但值得重复一遍:const限定符只是编译器的指令。它与你在运行时所做的任何事都没有任何关系。 const的意思是:“嘿,编译器先生:只要你注意到我以一种我不想要的方式修改这个变量,就告诉我。” AFAIK,编译器在看到这种自毁使用时会发出警告。我想你可能会让编译器在这种情况下发出一个完全错误的错误。