常量指针转换问题

[复制链接]
1393|3
 楼主| hsbjb 发表于 2012-8-9 18:43 | 显示全部楼层 |阅读模式
ST, TI, AI, ce, DM
#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的结果不一样?
火箭球迷 发表于 2012-8-9 20:45 | 显示全部楼层
(int)*p=0应该编译不能通过,p所指向的内容是不能改变的。
sinadz 发表于 2012-8-9 20:54 | 显示全部楼层
这是常量折叠的问题,编译的时候const会被数值替代,如const int i = 8;i会被8替代,相当于#define i 8
运行期间,i地址的内容确实被改变了,但是i的值已经在编译期间被8所替代
txcy 发表于 2012-8-9 21:05 | 显示全部楼层
(int)*p=0;  
前面定义了const,常量值是不能改变的,编译会报错试图给常量赋值……
您需要登录后才可以回帖 登录 | 注册

本版积分规则

193

主题

2354

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
0