首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++的类型转换,const恒量指针的转换

2012-09-01 
C++的类型转换,const常量指针的转换#includeiostream.h//using namespace stdvoid App(int * &pa,int n)

C++的类型转换,const常量指针的转换
#include<iostream.h>
//using namespace std


void App(int * &pa,int n);
void main()
{
const int t=3;  
const int *p=&t; 

  (int)*p=0;  
  cout <<*(&t) <<t<<endl;  
  cout <<*p <<endl;  
  cout<<p<<endl;
cout<<&t;

}
&t和p地址一样,但t和*p的结果不一样?

[解决办法]
(int)*p=0应该编译不能通过,p所指向的内容是不能改变的。
[解决办法]
恩,前面说的对
起始也可以看编译出来的汇编代码
再用到t的地方,编译器直接用 3 替换的。

push3
movebx, esp
push3
movecx, DWORD PTR __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A
[解决办法]
(int)*p=0; 
前面定义了const,常量值是不能改变的,编译会报错试图给常量赋值……
[解决办法]
这是常量折叠的问题,编译的时候const会被数值替代,如const int i = 8;i会被8替代,相当于#define i 8
运行期间,i地址的内容确实被改变了,但是i的值已经在编译期间被8所替代

热点排行