gpt4 book ai didi

c - 为什么我可以通过指针转换更改局部 const 变量而不是 C 中的全局变量?

转载 作者:太空狗 更新时间:2023-10-29 15:09:48 26 4
gpt4 key购买 nike

我想用指针改变常量的值。

考虑以下代码

int main()
{
const int const_val = 10;
int *ptr_to_const = &const_val;

printf("Value of constant is %d",const_val);
*ptr_to_const = 20;
printf("Value of constant is %d",const_val);
return 0;
}

正如预期的那样,常量的值被修改了。

但是当我用一个全局常量尝试相同的代码时,我得到了以下运行时错误。Windows 崩溃报告器正在打开。打印这条语句“*ptr_to_const = 20;”中的第一个 printf 语句后,可执行文件停止运行

考虑以下代码

const int const_val = 10;
int main()
{
int *ptr_to_const = &const_val;
printf("Value of constant is %d",const_val);
*ptr_to_const = 20;
printf("Value of constant is %d",const_val);
return 0;
}

本程序使用codeblocks IDE在mingw环境下编译。

谁能解释一下这是怎么回事?

最佳答案

它是一个常量,无论如何您都在使用一些技巧来更改它,因此会导致未定义的行为。全局常量可能在只读内存中,因此无法修改。当您尝试这样做时,您会遇到运行时错误。

常量局部变量是在栈上创建的,可以修改。所以在这种情况下你可以改变常量,但它仍然可能导致奇怪的事情。例如,编译器可以在不同的地方使用常量的值而不是常量本身,因此“更改常量”不会在这些地方显示任何效果。

关于c - 为什么我可以通过指针转换更改局部 const 变量而不是 C 中的全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/945640/

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