【发布时间】: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不是的意思是,“嘿,编译器:将这个变量放在只读内存中非常重要,这样无论如何,它都可以”不可能被修改。”更像是,“我保证不会尝试修改这个变量,但我可能会忘记,所以请尽量帮助我遵守我的承诺,如果不是太难的话。”