gpt4 book ai didi

c++ - 与 const 和指针相关的问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:11:35 25 4
gpt4 key购买 nike

我写了 2 个程序。请浏览这两个程序并帮助我理解为什么变量“i”和“*ptr”给出不同的值。

//Program I:
//Assumption: Address of i = 100, address of ptr = 500

int i = 5;
int *ptr = (int *) &i;

*ptr = 99;

cout<<i; // 99
cout<<&i;// 100
cout<<ptr; // 100
cout<<*ptr; // 99
cout<<&ptr; // 500
//END_Program_I===============

//Program II:
//Assumption: Address of i = 100, address of ptr = 500
const int i = 5;
int *ptr = (int *) &i;

*ptr = 99;

cout<<i; // 5
cout<<&i;// 100
cout<<ptr; // 100
cout<<*ptr; // 99
cout<<&ptr; // 500
//END_PROGRAM_II===============

困惑是:为什么变量 i 仍然是 5,即使 *ptr ==99?

最佳答案

在以下三行中,您正在修改一个常量:

const int i = 5;
int *ptr = (int *) &i;

*ptr = 99;

这是未定义的行为。任何事情都可能发生。所以不要这样做。


至于在这种特殊情况下发生的事情:

由于 iconst,编译器假定它不会改变。因此,它只是将 5 内联到每个使用它的地方。这就是为什么打印出 i 会显示 5 的原始值。

关于c++ - 与 const 和指针相关的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9030142/

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