放分,大家看看我的解答对不对!

peter9606 2004-07-08 10:06:05
在《C++Primer》中的第88页,有这样的例子。
const int ival = 1024;
const int* const &pi_ref = &ival; //这里的两个const到底哪个修饰指针,哪个修饰引用呢?以后遇到多个修饰符连在一起写的时候,怎样判断呢?谢谢!
-------------------------------------------------------------------------

楼主明白const int ival = 1024;的道理,那么下面的也不难。
首先const int * p = &ival ;表示不能进行下面的操作:*p = 10000 ; 也就是不能通过指针的解引用操作,改变被指向的变量的值,但是我们可以p= &ival2,去让它指向另外别的东西?答案是不可以,因为引用一旦被绑定,那么就不可以再更改,这里p显然已经和ival的地址绑定了。如果是这样的我们就可以改变p:
int x =100 ;
const int * px = &x ;
const int * &ppx = px ;
const int * px2 ;
然后我们 ppx = px2 ;
这样做显然是可以的。


int* &p = &ival ;表示p是一个指针类型的引用,既然是引用就可以把它当作被引用的对象一样使用,也就是说你可以*p = 1000; 或者 *(p++) (虽然这样做没有意义,但是我们是做个举例)。

const int* &p = &ival ; 表示p是一个const int *类型的引用,我们一样不可以通过*p去改变ival的值。但是这样做确实可以的:
void main(){
int x =100 ;
int x2 = 1000 ;
const int * px = &x ;
const int * &ppx = px ;
const int * px2 = &x2 ;
ppx = px2 ;

}

下面 说说const int* & const p = &ival ;吧
这里显然不但p绑定到了一个const int *类型上,而且p本身也是一个常量,也就是说p本身也不可以被改变:
void main(){
int x =100 ;
int x2 = 1000 ;
const int * px = &x ;
const int * const &ppx = px ;
const int * px2 = &x2 ;
ppx = px2 ; //------à这里显然就有错误了。

}

事实上const int * const & 与const int * const 的效果差不多,不是么?

本人愚笨,上面要是又错误,大虾们多多指教。

...全文
77 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
peter9606 2004-07-08
  • 打赏
  • 举报
回复
赫赫 谢谢
结贴~
RookieStar 2004-07-08
  • 打赏
  • 举报
回复
后面的应该没什么问题,分析的还可以。

事实上const int * const & 与const int * const 的效果差不多,不是么?
//////////////////////////////////////////////////////////////////
的确是这样的,因为前者不过是后者的一个别名罢了,本质一样。
RookieStar 2004-07-08
  • 打赏
  • 举报
回复
void main(){
int x =100 ;
int x2 = 1000 ;
const int * px = &x ;
const int * &ppx = px ;
const int * px2 = &x2 ;
ppx = px2 ;

}
////////////////////////////////
这样做可行是因为ppx是px的引用,而px自己的本质是一个指针(只是指向的整型值为const)。同理,px2也是指针,因为ppx(px的别名)没有对指针本身做const限制,所以这个赋值时正确的。
peter9606 2004-07-08
  • 打赏
  • 举报
回复
哦。。。 这个搞错了
别的呢 还有错误么
RookieStar 2004-07-08
  • 打赏
  • 举报
回复
首先const int * p = &ival ;表示不能进行下面的操作:*p = 10000 ; 也就是不能通过指针的解引用操作,改变被指向的变量的值,但是我们可以p= &ival2,去让它指向另外别的东西?答案是不可以,因为引用一旦被绑定,那么就不可以再更改,这里p显然已经和ival的地址绑定了。
////////////////////////////////////////
这里好像就有问题了。p=&ival2;这句是没有问题的。这里的&不是引用,而是取地址符,所以这里你的理论有问题。

下面的还没仔细看,我再看看。
hcj2002 2004-07-08
  • 打赏
  • 举报
回复
指向常引用的整形指针常量
peter9606 2004-07-08
  • 打赏
  • 举报
回复
RookieStar(★)(巴巴罗萨)

块给个结论呀,

谢谢啦:)
peter9606 2004-07-08
  • 打赏
  • 举报
回复
TO RookieStar(★)(巴巴罗萨)

我是想知道我的解答是否正确?
RookieStar 2004-07-08
  • 打赏
  • 举报
回复
const int ival = 1024;
const int* const &pi_ref = &ival;
//////////////////////////////////
pi_ref是一个const reference(第二个const/这里是ival地址的别名),并且这个reference指向的是一个内容不变(第一个const)的整型指针。
peter9606 2004-07-08
  • 打赏
  • 举报
回复
const(int * const( &ppx)) 如何解释呢
longki 2004-07-08
  • 打赏
  • 举报
回复

这一句中:const int * const &ppx = px ,根据就近原则(C++编程思想),应该是:
   const(int * const( &ppx)),所以我认为它地址是const,它指向的int型值也是const,
所以这两者都不能更改,故出现你所说的错误!

64,642

社区成员

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

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