有关const指针的一个有趣的问题 const指针不const?!

sean717 2004-01-02 11:41:26
刚看书发现一个问题 于是写了下面代码

int main()
{
int a=1;
const int* p=&a;
cout<<(*p)<<endl;

a=2;
cout<<(*p)<<endl;
return 0;
}

输出结果是
1
2

依我以前的理解 const int* p 声明一个指针p 指向一个不能修改的常量 ,但是以上代码显示, const int* p 指向的内存区域 也是可以改变的!

当然, 如果在上述程序中对*p赋值 编译器马上就报错了


欢迎大家讨论,这种机制应算一个bug?
...全文
50 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
etymet 2004-06-16
  • 打赏
  • 举报
回复
定义指向常量的指针是限制指针的间接访问操作,而不能规定指针指向的值的本身的操作规定性。
也就是修改*p //error
修改变量a //ok
yym314 2004-01-02
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

int main()
{
int a = 1;
const int *pa = &a;
int *pb = &a;

cout<< (*pa) <<'\t'<< (*pb) << endl;

(*pa)++; // can not compile
(*pb)++; // can compile
cout<< (*pa) <<'\t'<< (*pb) << endl;

return 1;
}


so i think,
const int *pa = &a;
its meanig is can not change 'a' by pointer pa.but you can change 'a' by pointer pb
Iamanders 2004-01-02
  • 打赏
  • 举报
回复
已经有答案了。
sharkhuang 2004-01-02
  • 打赏
  • 举报
回复
所以你直接用引用好了!
antijpn 2004-01-02
  • 打赏
  • 举报
回复
这个是对的,const int *p只不过是说不能同过*p来修改p指向的地址的值,并不是说这个值不能修改
shuishuangyu 2004-01-02
  • 打赏
  • 举报
回复
我例子是const int*p; 此p的值是可以改变的

//p可以改变,但是*p就不能了,p指向一个常量

依我以前的理解 const int* p 声明一个指针p 指向一个不能修改的常量 ,但是以上代码显示, const int* p 指向的内存区域 也是可以改变的!
//指针p 指向一个不能修改的常量意思是通过p的访问而言的
sean717 2004-01-02
  • 打赏
  • 举报
回复
liuweixtf(我想飞) ( )
你说的不对

你所说的是 常量指针 ,语法是int* const p;
我例子是const int*p; 此p的值是可以改变的
xingxing 2004-01-02
  • 打赏
  • 举报
回复
const int *p = &a
不能帮你检查a是不是一个常量指针,你需要申明const int a;
liuweixtf 2004-01-02
  • 打赏
  • 举报
回复
这是对的 不是bug
因为p是指向一个地址 这个地址是个常量不能改变 所以当你对*p赋值时会出错
但是当你对这个地址赋值就是正常的
你可以将上面的输出语句后面都加个 <<p 可以看到p指向的地址是不变的
sean717 2004-01-02
  • 打赏
  • 举报
回复
有人在不懂装懂哦
双杯献酒 2004-01-02
  • 打赏
  • 举报
回复
const int* p 声明一个指针p 指向一个不能"通过p"修改的变量
bing_huo 2004-01-02
  • 打赏
  • 举报
回复
const int* p ;
这个声明的是一个指针自身不能改变的指针,这个const并不修饰它所指的量
int * const p;
这样才声明一个指针指向一个const量

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧