const long p=5; cout<<"const long p is :"<<p<<","<<&p<<endl; long* pa=(long*)&p; *pa=10; cout<<"const long p is :"<<p<<","<<pa<<endl; ------ 打印出来的&p和pa的值,为什么*pa=10不能改变p的值呢? 与编译器有关吗?我用的dev-c++的
main(){
const long p=testt();
cout<<"const long p is :"<<p<<","<<&p<<endl;
long* pa=(long*)&p;
*pa=10;
cout<<"const long p is :"<<p<<","<<pa<<endl;
cin.get();
}
这样就可以看到改变了
编译器在编译程序时分为几次扫描,很能在第一次扫描过程中将所有用到常量的地方用常量的具体值替换,这是所谓的“常量折叠”,所以你的程序很可能在第一次扫描后变成:
const long p=5;
cout<<"const long p is :"<<5<<","<<&p<<endl; //注意这里的“5”
long* pa=(long*)&p;
*pa=10;
cout<<"const long p is :"<<5<<","<<pa<<endl; //注意这里的“5”
感谢 OOPhaisky(渴望成功) 的补充
const long p=5;
cout<<"const long p is :"<<p<<","<<&p<<endl;
long* pa=(long*)&p;
*pa=10;
cout<<"const long p is :"<<p<<","<<pa<<endl;