编程论坛
注册
登录
编程论坛
→
C++教室
求助 *&q和q的含义 谢谢
datoushan
发布于 2010-04-14 20:50, 1191 次点击
int *&q=p; 此时*&q和q 的含义,输出的为什么是同一个“地址”
7 回复
#2
ljt
2010-04-14 22:12
回复 楼主 datoushan
#include <fstream.h>
#include <assert.h>
main(int argc,char* argv[])
{
int a=7;
int *p=&a;
int *&q=p;
cout<<p<<endl;
cout<<q<<endl;
cout<<*q<<endl;
cout<<&q<<endl;
cout<<*&q<<endl;
}
/*
结果:
0x0012FF7C
0x0012FF7C
7
0x0012FF78
0x0012FF7C
Press any key to continue
从结果看到p和q都是指向a,也就是p中的内存保存了a的地址,
指针q本省也要有内存空间,&q即指针q的地址;*&q呢,就是
取就是去q的地址保存的内容,q地址保存的内容就是a的地址,
所以*&q=q。
#3
atemouse
2010-04-14 23:17
int p;
int *q;
q=&p;
即我们可以这样看*&q=*(&q)=*p=q,所以*&q=q
#4
datoushan
2010-04-15 10:00
回复 2楼 ljt
非常感谢
#5
datoushan
2010-04-15 10:01
回复 2楼 ljt
不胜感激
#6
datoushan
2010-04-15 10:05
回复 3楼 atemouse
谢哈
#7
hahayezhe
2010-04-15 12:55
首先小小打击你们一下
你们都理解错误了
*&q是指针的引用
也就是说 q是指针*p的别名
接下来 小改一下你们的程序
using namespace std;
int main(int argc, char* argv[])
{
int a=7;
int *p=&a;
int *&q=p;
cout<<"&a="<<&a<<endl;
cout<<"p="<<p<<endl;
cout<<"&p="<<&p<<endl;
cout<<"q="<<q<<endl;
cout<<"*q="<<*q<<endl;
cout<<"&q="<<&q<<endl;
cout<<"*&q"<<*&q<<endl;
}
只有本站会员才能查看附件,请
登录
这是我们可以看到q 居然没有自己的地址
为什么呢
因为q是一个指针引用 它只是p的一个别名而已 他相当于一个常量
他的内容就是p的地址
所以我们可以看到 a的地址 p的指向地址 *&q别名地址 都是a的地址
而&p 以及&q 注意这里不是取q的地址 而是取的p的地址 因为q是p的引用
取引用的地址 当然就是取引用对象的地址 所以又是一样的
#8
缝小肛
2010-04-15 16:31
楼7哥们也说错了
我接着7楼的继续 int *&q=p; 这句是1楼的问题,我们可以先看下结合性。
我们可以看成 int * &q=p;也就是说 &q是p的一个引用(别名)
他们共同占同一地址。就相当于 我大名 缝小肛,我在老家 长辈叫我 小肛(别名)。不管怎么叫都是我本人。OK ?
然后 &q 才结合 * 号; 说明P的引用 是一个指针, 他是一个 int 型的 指针。
我也刚接触C++ 不对的地方 还请高手指出来
1