【问题标题】:Why can i change the value of a constant (const char * ) trough a pointer? [duplicate]为什么我可以通过指针更改常量(const char *)的值? [复制]
【发布时间】:2019-12-06 22:47:51
【问题描述】:

标题说明了一切。我怎样才能改变常数的值? 这与更改常量数组的索引 X 处的元素的值相同吗?

    #include<iostream>
    int main(){
        const char* y = "original";
        auto *p = &y;
        *p = "modified";
        std::cout<<y<<"\n";
        //outputs modified
        system("pause");
        return 0;
    }

【问题讨论】:

  • 你正在改变 y 指向的内容。
  • 现在试试y[0] = 'x';
  • 嗯我明白了,但是在一天结束时,一个常量字符串/字符是否有意义了?
  • 是的,但是常量指针和指向常量数据的指针是有区别的。顺便说一句,修改指针(使其指向不同的位置)和修改它指向的数据也有区别。
  • 是的,这是有道理的。您不能更改文字,但这不是您的代码所做的,y 不是常量...

标签: c++ pointers constants


【解决方案1】:

注意y 是一个非常量 指针(指向const)。您没有修改const 部分,即y 指向的const char,而是y 本身;这是有效的。 BTW 通过指针p 修改y

const char* y = "original";
y = "modified";  // this is well-formed

另一方面,

*y = 'm';  // this is ill-formed

如果您创建yconst,那么您可能会得到您期望的诊断结果。

const char* const y = "original";
y = "modified";  // ill-formed
*y = 'm';        // ill-formed

【讨论】:

    猜你喜欢
    • 2010-10-01
    • 2016-05-25
    • 1970-01-01
    • 2015-08-14
    • 2011-11-29
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多