【问题标题】:change the values of const variable and static const variable in c languagec语言改变const变量和静态const变量的值
【发布时间】:2021-01-24 06:58:21
【问题描述】:

我有两个程序:

第一个程序:

#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 有什么区别吗!

【问题讨论】:

标签: c static constants


【解决方案1】:

两个程序都执行语句 int *b; b = &amp;a; *b = 200;,这会调用未定义的行为,因为 aconst int,因此不应修改。没有正确答案(预期输出)——崩溃和不崩溃都是可接受的结果,打印10200(或lemons and oranges——尽管这不太可能发生)。

不要执行任何导致未定义行为的事情!

你的编译器应该抱怨;注意它的警告。如果它没有抱怨,请获得更好的编译器。

不同之处在于static const int a = 10; 变量被放置在只读段中(可能是文本段的一部分,尽管这并不重要),因此系统可以在您写入它时发现并导致崩溃。另一方面,const int a = 10; 被放置在堆栈上,并且堆栈是可修改的,因此您不会崩溃。

【讨论】:

  • 谢谢,乔纳森
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-25
相关资源
最近更新 更多