问题描述
- 同样地址,内容不一样的问题
-
const int x = 50; int* y = (int *)(&x); *y = 200; cout << "x: "<<x<<" address: "<<&x<<endl; cout << "*y: "<<*y<<" address: "<<y<<endl; cout<<endl;
以上是一段代码,输出的结果是:x: 50 * y=200 地址是一样的.
但是如果我把int改成float或者double那么值就都变成了200..
是不是因为原来为int型,一个地址存放了两个值,float型比较长,无法存放两个值
求解答~~
解决方案
对 const 类型变量进行间接的修改,就会导致相同地址的数值是不一样的,与变量的类型,int 或 float 无关。
解决方案二:
为变量分配地址是编译器的事情,不同的编译器,不同的优化选项,不同的平台都不一样。一些编译器为了紧凑而连续使用内存,一些编译器为了程序的高效,而对变量按照机器字长对齐,故意变量之间有间隙。
这个就很难说了。
解决方案三:
修改常量值导致未定义行为,表现可以是有时候看似管用,有时候不能用。
解决方案四:
你修改int为float显示是编译器的事情,不同的编译器分配地址的方式不一样,还有const修饰的变量不能被修改内容,所以你的const int x还是50
解决方案五:
x定义为const,那么编译器可能会把x优化成一个字面变量,因为你访问它地址修改值,而x本身可能还是原来的
修改const变量对编译器来说一种未定义行为,你不应该进行这样的操作,发生什么样的结果都是不可预见的
时间: 2024-08-02 21:57:56