![](/img/trans.png)
[英]Can “static const char array” include a member of variable on C language
[英]change the values of const variable and static const variable in c language
我有两个程序:
第一个程序:
#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;
}
第一个程序有一个运行时错误:“总线错误:10”,但第二个程序运行良好。 你能告诉我这两个程序中的 const 和 static const 有什么区别吗?
两个程序都执行语句int *b; b = &a; *b = 200;
int *b; b = &a; *b = 200;
它调用未定义的行为,因为a
是一个const int
,因此不应修改。 没有正确的答案(预期的输出)——崩溃和不崩溃都是可接受的结果,打印10
或200
(或lemons and oranges
——尽管这不太可能发生)。
不要执行任何导致未定义行为的事情!
你的编译器应该抱怨; 注意它的警告。 如果它没有抱怨,请获得更好的编译器。
不同的是static const int a = 10;
变量被放置在只读段中(可能是文本段的一部分,尽管这并不重要),因此系统可以在您写入它时发现并导致崩溃。 另一方面, const int a = 10;
放置在堆栈上,并且堆栈是可修改的,因此您不会崩溃。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.