【问题标题】:How this const value is getting changed..? [duplicate]这个 const 值是如何改变的..? [复制]
【发布时间】:2019-10-03 14:38:59
【问题描述】:

我读到常量值无法更改,但在下面的代码中,i 的值通过使用指针进行了更改。我可以知道怎么做吗?

#include <stdio.h>

int main()
{
    const int i = 10;
    int *ptr = &i;
    *ptr = 20;
    printf("%d\n", i);
    return 0;
}

此代码的输出为 20,并带有编译器警告。

【问题讨论】:

  • 这个程序在作弊——违反了规则——而警告反映了这一点。
  • const 有点像电器背面的贴纸,上面写着“请勿打开 - 内部没有用户可维修的部件”。但是如果你拿螺丝刀打开它,你可以试试……
  • 编译器会容忍..作弊和违反规则..不要抛出错误..?
  • 你说编译器确实抛出了一个警告——这对你来说还不够好吗?
  • const 不是的意思是,“嘿,编译器:将这个变量放在只读内存中非常重要,这样无论如何,它都可以”不可能被修改。”更像是,“我保证不会尝试修改这个变量,但我可能会忘记,所以请尽量帮助我遵守我的承诺,如果不是太难的话。”

标签: c pointers constants


【解决方案1】:

您的代码的行为是未定义 - 该语言没有定义修改最初声明为 const 的对象的行为,该对象通过删除了 const 的指针进行修改。

在一些开启优化的编译器上,输出 10 是合理的。

猜你喜欢
  • 1970-01-01
  • 2017-09-23
  • 1970-01-01
  • 2020-10-15
  • 2020-11-23
  • 2020-02-04
  • 2017-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多