【发布时间】:2019-02-23 19:10:30
【问题描述】:
在下面的代码中
#include <string.h>
#include <iostream>
using namespace std;
int main()
{
int *a;
const int b=5;
a=(int *)&b;
*a=6;
cout<<*a<<b<<endl;
cout<<a<<" "<<&b;
return 0;
}
b 的地址被类型转换并存储到 a。所以据我所知,*a 必须指向与 b 相同的位置,并且应该给出与 b 相同的值。获取 a 和 &b 的输出显示它们都指向同一个内存位置。
但是 a* 和 b 给出不同的值作为输出。如果我没有对指针进行类型转换,那么我将得到 *a 和 b 的相同值。有人可以帮我找出这里有什么问题吗?提前感谢
65
0x7fff2e7969fc 0x7fff2e7969fc
【问题讨论】:
-
你所拥有的是未定义的行为。
-
当您更改声明为 const 的值时,您的程序具有未定义的行为。你很幸运它没有崩溃。
-
@john 实际上,如果它真的崩溃了,他会更幸运。
标签: c++ pointers reference typecasting-operator