如何解决c语言修改const变量和静态const变量的值
我有两个程序:
第一个程序:
#include<stdio.h>
int main()
{
static const int a = 10;
int * b;
b = &a;
*b = 200;
printf("%d",a);
return 0;
}
第二个程序:
#include<stdio.h>
int main()
{
const int a = 10;
int * b;
b = &a;
*b = 200;
printf("%d",a);
return 0;
}
第一个程序有一个运行时错误:“Bus error: 10”,但第二个程序运行正常。 你能告诉我这两个程序中const和static const的区别是什么!
解决方法
两个程序都执行调用未定义行为的语句 int *b; b = &a; *b = 200;
,因为 a
是一个 const int
,因此不应被修改。没有正确的答案(预期输出)——崩溃和不崩溃都是可接受的结果,打印 10
或 200
(或 lemons and oranges
——尽管这不太可能发生)也是如此。
不要执行导致未定义行为的任何事情!
你的编译器应该抱怨;注意它的警告。如果它没有抱怨,请获得更好的编译器。
不同之处在于 static const int a = 10;
变量被放置在一个只读段中(可能是文本段的一部分,尽管它确实无关紧要),因此系统可以在您写入时发现并导致碰撞。另一方面,const int a = 10;
被放置在堆栈中,并且堆栈是可修改的,因此您不会崩溃。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。