C++ Primer好书??书上说:定义一个const指针指向一个const或者非const对象。编译错!!

snow810211 2005-02-22 03:50:21
书上page 85中间,说“我们可以定义一个const指针指向一个const或者非const对象”。
但是编译有问题,请看:

void main()
{
int a = 10;
int *const pt = &a;//指向一个非const对象,没有问题
}

void main()
{
const int a = 10;
int *const pt = &a;//指向一个const对象,编译出错。
}

怎么回事。
备注:我才看c++ primer,绝对不是否定它,只是这个问题有点疑问。
...全文
424 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
ghwangtongji 2005-02-25
  • 打赏
  • 举报
回复
/*
书上page 85中间,说“我们可以定义一个const指针指向一个const或者非const对象”。
但是编译有问题,请看:

void main()
{
int a = 10;
int *const pt = &a;//指向一个非const对象,没有问题
}

void main()
{
const int a = 10;
int *const pt = &a;//指向一个const对象,编译出错。
}

怎么回事。
备注:我才看c++ primer,绝对不是否定它,只是这个问题有点疑问。
*/

//"我们可以定义一个const指针指向一个const或者非const对象"
没什么问题啊
这句话可以变成:1,2两点
1."我们可以定义一个const指针指向一个const对象"
void main()
{
const int a = 10;
//你的定义不正确
//! int *const pt = &a;//指向一个const对象,编译出错。
const int *const pt = &a;//定义一个const指针指向一个const对象
}

2."我们可以定义一个const指针指向一个非const对象"
void main()
{
int a = 10;
int *const pt = &a;//定义一个const指针指向一个非const对象
}
sinkinglife 2005-02-25
  • 打赏
  • 举报
回复
只有指向const对象的指针才能指向const对象,也就是:
int main()
{const int a = 10;
const int *const pt = &a;
retutn 0;
}
或:
int main()
{const int a = 10;
const int * pt = &a;
retutn 0;
}
才不会出错。
Great_Bug 2005-02-24
  • 打赏
  • 举报
回复
int a = 1;
const int b = 2;
有四种情况
指针 所指对象
变量 变量 int* pv1 = &a;
变量 常量 const int* pv2 = &b;
常量 变量 int* const pc1 = &a;
常量 常量 const int* const pc2 = &b;
tongdegang2005 2005-02-24
  • 打赏
  • 举报
回复
你可以把int *const pt = &a;
改成:const int *const pt=&a;
这样就表示通过指针指向的内容不可以修改了,前后一直了,编译通过!!
ybt631 2005-02-23
  • 打赏
  • 举报
回复
const指针 理解的问题。
支持楼上
Wolf0403 2005-02-23
  • 打赏
  • 举报
回复
呵呵。。。const 指针确实是个不严谨的说法。。。英文吧
int * const p 是 const pointer
const int * p 是 pointer to const

但是我们通常把 const int * p 称为 const 指针 -_-#
snow810211 2005-02-23
  • 打赏
  • 举报
回复
恩,因为就是在primer上面,先说过了const int * ptr这种形式,等到了讲到int * const ptr = &a这种形式的时候,才说的上面的话。
如果大家有c++ primer电子版看看也可以,第85页。

嘿嘿,就是因为当时我看的时候有点疑问,才提出的~~~c++ primer绝对是好书~~讲得老详细了:)
zhengwei1984222 2005-02-23
  • 打赏
  • 举报
回复
primer没错
zhengwei1984222 2005-02-23
  • 打赏
  • 举报
回复
指针常量是指针本身是常量就是它的内容不变也就是指向的地址不变
既这种形式:int *const pt
常量指针它本身可以变,但是它指向的对象不能通过它改变
既这种形式:const int* pt

const指针顺序翻译过来就是常量指针,显然是后者

关于记忆,我是这样的:
首先你听过常量整形吗?没有,只有整形常量,所以指针常量是指针本身是常量的指针既前者
io(王飞) 2005-02-22
  • 打赏
  • 举报
回复
嗯,我说错了,这个“const指针”的确有问题。似乎要理解为指向const变量的指针才对。
timepalette 2005-02-22
  • 打赏
  • 举报
回复
呵呵, 一个是指向的地方不能改,一个是本身不能改。

谈到指针,就要涉及到两个地址。一个是存这个指针变量的地址,一个是指针变量的内容(代表另一个地址);((而普通变量就是一个--存这个普通变量的地址。))

两个地址都要有访问权限,从而利用const的位置不同来区分。
snow810211 2005-02-22
  • 打赏
  • 举报
回复
啊?
const指针~

int a;
const int *c=&a;

那这个呢:
int *const c = &a;

这个叫不叫const指针?谢谢
io(王飞) 2005-02-22
  • 打赏
  • 举报
回复
“我们可以定义一个const指针指向一个const或者非const对象”显然是对的。
见pdaliu(刘星)的程序。
wakinhui 2005-02-22
  • 打赏
  • 举报
回复
const int *const pt = &a ;// ok
pdaliu 2005-02-22
  • 打赏
  • 举报
回复
int a;
const int b;
const int *c=&a;
const int *c=&b;
snow810211 2005-02-22
  • 打赏
  • 举报
回复
感谢大家,但是我的疑问是:
书上page 85中间,说“我们可以定义一个const指针指向一个const或者非const对象”。

我不是钻牛角尖~~就是想看看这句话是不是错了。。。。
jongwy 2005-02-22
  • 打赏
  • 举报
回复
const int* pt 表明pt是指向int类型的指针,但不能改变pt所指向的int对象。
int* const pt 表明pt是指向int类型的const指针,可以改变pt所指的int对象,但不能改变pt指针本身。
const int* const pt 表明pt是指向int类型的const指针,但既不能改变pt所指的int对象,也不能改变pt指针本身。
io(王飞) 2005-02-22
  • 打赏
  • 举报
回复
晕死。
倒读:
int *const pt 读作:常量指针pt指向int
const int * pt 读作:指针pt指向int常量
关键在于那个*号:他读作“指向”。
cxc014 2005-02-22
  • 打赏
  • 举报
回复
int *const pt 中const是修饰pt的,就是说pt指向a的地址,不能改变了,但可以*pt = 32来改变pt所指向地址的值,这儿即是a的值,而a是个常量,所以出错
snow810211 2005-02-22
  • 打赏
  • 举报
回复
to 回复人: lotusweb() ( ):
谢谢。
这个道理我也知道,但是就是不理解书上说的~~~

to oo(为了名副其实,努力学习oo技术ing) ( )

谢谢,这个了解了~~~我就是对书上的这句话有点疑问:)

to healer_kx(天降甘草) ( )
没准你对了,我也不知道a是不是一个const对象....
加载更多回复(4)

65,210

社区成员

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

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