繁体   English   中英

const char指针修改

[英]const char pointer modification

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

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

以上作业有效吗?

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

因此,是的,上面的分配是完全有效的。


我想知道这个问题是否与您先前的问题有关 您在这里说:

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

如果“修改值”是指修改字符串的内容(这是您在上一个问题中要执行的操作),那么不能。 在此处给出的示例中,您有两个指针指向相同的恒定内存块。 如果一个指针不能修改该内存,则另一个指针也不能。

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

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

是的,它是完全有效的。

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

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

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

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

您已经知道这一点,但是值得重复: const限定符编译器的指令。 它与您在运行时的感觉无关。 const的含义是:“嘿,编译器先生:每当您注意到我以我不是故意的方式修改此变量时,请告诉我。” AFAIK,当编译器看到这种自毁用法时,会发出警告。 我想在这种情况下,您也许能够使编译器发出平坦的错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM