关于const int *q的问题,有些疑问,请各位帮忙!!

bookoo 2009-03-13 07:36:10
#include<iostream.h>
void main()
{
const int a=1;
const int b=2;
int i=3;
int j=4;
const int* q=&i;

cout<<"q="<<q<<endl;
i++;
cout<<"*q="<<*q<<endl;

q=&a;
cout<<"q="<<q<<endl;
cout<<"*q="<<*q<<endl;
q=&b;
cout<<"q="<<q<<endl;
cout<<"*q="<<*q<<endl;
}

执行结果如下:
q=0x0012FF74
*q=4
q=0x0012FF7C
*q=1
q=0x0012FF78
*q=2 //书上说:const int *q; q只能指向一个被const修饰的整形变量--就是常量
这里q为什么能指向i,而且i++后,*q==i.
...全文
156 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
bookoo 2009-03-13
  • 打赏
  • 举报
回复
谢谢各位指教了
知道:*q=j,是编译错的,不能通过*q来改变值.

我的本意:
q只能指向有const修饰的变量,所以*q的值固定下来,再也不变了;

象int* const p;p就是一个固定的地址;
fairchild811 2009-03-13
  • 打赏
  • 举报
回复
const int *p;

const修饰整个p的变量.所以p可以改
senleng 2009-03-13
  • 打赏
  • 举报
回复
const int *p;
int * const p;
const int *const p;
很有意思~
aime99 2009-03-13
  • 打赏
  • 举报
回复
(1)const int *q = &i; //这应该是说我们不能通过指针q来改变q所指向的内容,即*q = 4; 是不可以的
(2)//书上说:const int *q; q只能指向一个被const修饰的整形变量--就是常量
如果让const int *q = 2; 那是肯定错的
可以降一个非const赋值给一个const值,这肯定是对的,在函数调用时不是经常这样写么
lei_zhuyan 2009-03-13
  • 打赏
  • 举报
回复
晕 。
为什么回复一次就出现了2次。
...
dongpy 2009-03-13
  • 打赏
  • 举报
回复
*q=2 //书上说:const int *q; q只能指向一个被const修饰的整形变量--就是常量
这里q为什么能指向i,而且i++后,*q==i.
=====================================================================
q=&a;
q=&b;
q已经指向其他变量了。
lei_zhuyan 2009-03-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fableboy 的回复:]
引用 3 楼 lei_zhuyan 的回复:
//书上说:const int *q; q只能指向一个被const修饰的整形变量--就是常量
这里q为什么能指向i,而且i++后,*q==i.
-----------------------------------------------------------------

书上从来就没有这样说过,你可能理解错了
const int* q = i;

是指不能通过*q来改变i的值,但是i的值是可以通过给i赋值来改变的。
你自己可以写些程序来试试。也可以看看…
[/Quote]

这并不是把const强转为非const的:const_cast的意思。
如7楼所说,const X* 表示通过这个指针只能对内存数据进行只读访问,并没有其它要求。

比如int i;
const int* p = &i;
int* q = &i;

指针p,q都指向i,但是不可以对*p赋值,但是可以对*q赋值。
i=10;//true
*p=10;//error
*q=10;//true
lei_zhuyan 2009-03-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fableboy 的回复:]
引用 3 楼 lei_zhuyan 的回复:
//书上说:const int *q; q只能指向一个被const修饰的整形变量--就是常量
这里q为什么能指向i,而且i++后,*q==i.
-----------------------------------------------------------------

书上从来就没有这样说过,你可能理解错了
const int* q = i;

是指不能通过*q来改变i的值,但是i的值是可以通过给i赋值来改变的。
你自己可以写些程序来试试。也可以看看…
[/Quote]

把const强转为非const的:const_cast?
------------------------
不是的,就如7楼兄弟所说,
const X* 表示通过这个指针只能对内存数据进行只读访问,并没有其它要求。
Cpp权哥 2009-03-13
  • 打赏
  • 举报
回复
const X* 表示通过这个指针只能对内存数据进行只读访问,并没有其它要求。
jakqigle 2009-03-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lei_zhuyan 的回复:]
//书上说:const int *q; q只能指向一个被const修饰的整形变量--就是常量
这里q为什么能指向i,而且i++后,*q==i.
-----------------------------------------------------------------

书上从来就没有这样说过,你可能理解错了
const int* q = i;

是指不能通过*q来改变i的值,但是i的值是可以通过给i赋值来改变的。
你自己可以写些程序来试试。也可以看看c++ primer中const 指针那节。

[/Quote]
把const强转为非const的:const_cast?
mengde007 2009-03-13
  • 打赏
  • 举报
回复
三楼说的好!
lei_zhuyan 2009-03-13
  • 打赏
  • 举报
回复
//书上说:const int *q; q只能指向一个被const修饰的整形变量--就是常量
这里q为什么能指向i,而且i++后,*q==i.
-----------------------------------------------------------------

书上从来就没有这样说过,你可能理解错了
const int* q = i;

是指不能通过*q来改变i的值,但是i的值是可以通过给i赋值来改变的。
你自己可以写些程序来试试。也可以看看c++ primer中const 指针那节。
讲的很详细。
lei_zhuyan 2009-03-13
  • 打赏
  • 举报
回复
//书上说:const int *q; q只能指向一个被const修饰的整形变量--就是常量
这里q为什么能指向i,而且i++后,*q==i.
-----------------------------------------------------------------

书上从来就没有这样说过,你可能理解错了
const int* q = i;

是指不能通过*q来改变i的值,但是i的值是可以通过给i赋值来改变的。
你自己可以写些程序来试试。也可以看看c++ primer中const 指针那节。
讲的很详细。
Chevin 2009-03-13
  • 打赏
  • 举报
回复
1.
const int* q=&i; 这个初始化

2.
q只能指向一个被const修饰的整形变量--就是常量。
没说q不能变吧。只说了q所指的变量不能变而已,并不是说q自己不能变。
chin_chen 2009-03-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 bookoo 的帖子:]
书上说:const int *q; q只能指向一个被const修饰的整形变量--就是常量
这里q为什么能指向i,而且i++后,*q==i. …
[/Quote]
没这么说吧,你这么写只是说明,q指向的是一个const,你可以降一个非const赋值给一个const啊很正常啊

65,211

社区成员

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

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