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 无关。
修改常量值导致未定义行为,表现可以是有时候看似管用,有时候不能用。
x定义为const,那么编译器可能会把x优化成一个字面变量,因为你访问它地址修改值,而x本身可能还是原来的
修改const变量对编译器来说一种未定义行为,你不应该进行这样的操作,发生什么样的结果都是不可预见的
为变量分配地址是编译器的事情,不同的编译器,不同的优化选项,不同的平台都不一样。一些编译器为了紧凑而连续使用内存,一些编译器为了程序的高效,而对变量按照机器字长对齐,故意变量之间有间隙。
这个就很难说了。