const int a = 3; int* p = (int *)&a;*p = 4;printf("a-------%d------", a); printf("*p-------%d------", *p); printf("&a-------%d------", (int)&a); printf("p-------%d------", (int)p);
輸出:
a-------3------ *p-------4------ &a-------1606416268------ p-------1606416268------
問(wèn)題是 const
修飾a
變量后,a
不能修改,但是可以隱式修改a
的值,就是用指針。 我用指針修改了值,為什么輸出的時(shí)候 a
沒(méi)有改變。*p
的值改變了。
a應(yīng)該是被你的編譯器優(yōu)化成一個(gè)常數(shù)量3了。
我用gcc 5.4.0用默認(rèn)參數(shù)編譯,結(jié)果就是a=4的輸出。
gcc version 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)下 a = 4
因?yàn)檫@本身就是ub,你這么做究竟能導(dǎo)致什么結(jié)果,編譯器是不會(huì)給你保證的。
看到過(guò)這個(gè)問(wèn)題,給個(gè)鏈接:http://www.zhihu.com/question...
我在ubuntu gcc 4.8.4下,輸出的a = 4