gpt4 book ai didi

c - static const int 与 const int 之间的区别

转载 作者:行者123 更新时间:2023-12-05 08:30:07 25 4
gpt4 key购买 nike

const int a = 100;
int *p = &a;
*p = 99;
printf("value %d", a);

上面的代码可以编译,我可以通过指针更新它的值,但是下面的代码没有输出任何东西。

static const int a = 100;
int *p = &a;
*p = 99;
printf("value %d", a);

谁能解释一下这件事。

最佳答案

两个代码片段都是无效的 C. 在初始化/赋值时,要求“左边指向的类型具有指向的类型的所有限定符按右边”(c17 6.5.16.1)。这意味着我们不能将 const int* 分配给 int*

“上面的代码编译”好吧,它没有 - 它没有干净地编译。参见 What must a C compiler do when it finds an error? .

我建议您使用(在 gcc、clang、icc 上)-std=c11 -pedantic-errors 来阻止无效的 C 编译而不会出错。

由于代码是无效的 C,它是未定义的行为,并且它具有特定行为的原因是任何人的猜测。推测为什么从一种未定义行为的情况到另一种情况会得到一个特定的输出并不是很有意义。 What is undefined behavior and how does it work?而是专注于编写没有错误的有效 C 代码。

关于c - static const int 与 const int 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66312485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com