第2个回答 2013-07-26
int *&r ;
这种形式是指针的引用形式,
就是说r是一个指针变量的别名,在这里r就是一个整形指针变量的别名,
因为int *&r = new int ;
这里new int就是在堆区分配一个int类型大小的空间,并返回这个空间的整形指针,
这里的new int返回的指针没有命名,可以看成一个隐藏类型的指针,如果把上边这一句拆开,
就是如下这样的
int *p = new int;
int *(&r) = p;
上边是把这个隐藏指针还原成p,这样可以更好的理解,你参考引用类型的定义说明
所以后边的就很好解释了,
*r = 6;因为r是p的别名,这句话就是*p = 6;
所以第一条输出 *r = *p = 6;
第二条输出是r,因为引用类型只是一个别名,事实上是不存在这个变量的地址的,所有出现p的地方都可以用r来代替,r就是p,这里输出r就是输出指针p,所以001477D8就是指针p中存储的值。(指针变量存储的都是一个地址值,6是001477D8这个地址存储的值)
第三条输出*&r,也就是*&p,(这里的&不是引用的意思,&只有在定义变量的时候才有引用的意思,这里的&是取地址),就是先取p的地址,然后再取这个地址的指向,其实也就是p,所以输出仍然是001477D8。
第四条输出&r,也就是&p,这里的&还是取地址的意思,也就是取p的地址,所以这个值不是001477D8了,是指向001477D8的值,也就是002FF678这个地址的变量。本回答被提问者和网友采纳