初学指针的疑问???

四周的风景 2006-02-16 11:26:32
初学指针,指高手解析一下为什么会出现这样的结果
int *p;
int i=2;
p=&i;
int **pi = &p;

cout << p << endl; //输出的是i地址
cout << *p << endl; //输出的值2
cout << &p << endl; //输出的是p地址
cout << pi <<endl; //输出的是p地址
cout << *pi << endl; //输出的是i地址
cout << **pi << endl; //输出的值2
...全文
314 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
guodong_77 2006-02-19
  • 打赏
  • 举报
回复
这啊,指针和引用指向的都是数据的内存地址,**p 就是定义的一个二重指针,为指向地址的地址。&&i;
int t = 999;
const int *a = &t;//指针指向的内容不可更改。
zhwang_1999 2006-02-18
  • 打赏
  • 举报
回复
慢慢来,不着急
jixingzhong 2006-02-18
  • 打赏
  • 举报
回复
指针的本质 ...

int i=2;
p=&i;
int **pi = &p;

所以
**pi = *p = i = 2
*pi = p = &i = i的地址
pi = &p = p的地址

得到的就是你的结果 !!
MQ_60S 2006-02-18
  • 打赏
  • 举报
回复
不浪费楼主时间了!看du51(郁郁思扬)的解释即可!
yuchen2006 2006-02-18
  • 打赏
  • 举报
回复
这里**pi的意思是,它将存放一个指针本身的地址,也就是p这个指针本身的地址,不是p指针指向的地址,是这个指针本身的地址。
解释的不知道是不是对。
yxg80 2006-02-18
  • 打赏
  • 举报
回复
pyrophile(写代码就像打太极) 说得很明白,不用多说了
不过对于初学者可能还是不太容易,没关系,慢慢体会
piaochen_2002 2006-02-18
  • 打赏
  • 举报
回复
JF
EnginePlus 2006-02-18
  • 打赏
  • 举报
回复
接分;)
ericqxg007 2006-02-17
  • 打赏
  • 举报
回复
概念最重要~~~ 不管形式如何变化深刻理解概念就可以了~~~
du51 2006-02-16
  • 打赏
  • 举报
回复
i是一个变量,有其地址.
i=2是赋值运算. 运算后,i的值变为2
但是,i所在的地址不变.
p=&i; 其中&是取地址运算.运算后p的值是i的地址.

注意.p本身也是一个变量,也有地址.
同理nt **pi = &p;中&依然是取地址运算,运算后,pi的值变为p的地址.

cout << p << endl; //这个式了输出的是p的值,如上所说是i的地址
cout << *p << endl; //*是取值运算..此是p是i的地址,从这个地址中取值.当然是i
cout << &p << endl; //&是取地址运算,p本身也是变量,当然输出p的地址
cout << pi <<endl; //如上所说,pi中存的是p的地址,所以输出p的地址
cout << *pi << endl; //*取值运算..而pi中是p的地址.所以此时输出p的值,而p的值是i的地 址所以此处输出i的地址.
cout << **pi << endl; //上行所说,*pi是i的地址,再加*再取值, 在i的地址中取出的值当然是i了.所以,输出2


qybao 2006-02-16
  • 打赏
  • 举报
回复
一层一层看你就明白了
cout << p << endl; //输出的是i地址
cout << *p << endl; //输出的值2
cout << &p << endl; //输出的是p地址
cout << pi <<endl; //输出的是p地址
cout << *pi << endl;-->cout << *(&p) <<endl;-->cout << p <<endl; //输出的是i地址
cout << **pi << endl;-->cout << *(*pi) <<endl;-->cout << *(*(&p)) <<endl;-->cout << *(p) <<endl;-->cout << *p << endl; //输出的值2
寻开心 2006-02-16
  • 打赏
  • 举报
回复
任何一个变量都有它所表述的内容,以及它所在的地址
变量的内容由变量的类型确定的
变量的地址用&操作来提取
指针容纳的是地址,各种类型的地址,根据指针类型的定义而不同
c/c++当中最灵活也是最危险的就是它了
dragonzxh 2006-02-16
  • 打赏
  • 举报
回复
这题最多值10分。。。。
polarman 2006-02-16
  • 打赏
  • 举报
回复
pyrophile(写代码就像打太极) 说得很明白,不用多说了
不过对于初学者可能还是不太容易,没关系,慢慢体会
pyrophile 2006-02-16
  • 打赏
  • 举报
回复
int *p;//定义一个指向int类型的指针,用一个不恰当的说法解释一下指针,就是指针就是地址
int i=2;
p=&i;//取i的地址,赋值给p,所以p的值是i的地址,*p就是i的值2
int **pi = &p;//定义一个指向int类型的指针的指针,就是指向p的地址,所以**p就是

cout << p << endl; //输出的是i地址
cout << *p << endl; //输出的值2
cout << &p << endl; //输出的是p地址
cout << pi <<endl; //输出的是p地址
cout << *pi << endl; //输出的是i地址
cout << **pi << endl; //输出的值2
逸学堂 2006-02-16
  • 打赏
  • 举报
回复
int *p;
int i=2;
p=&i;
int **pi = &p;

cout << p << endl; //输出的是i地址
cout << *p << endl; //输出的值2
cout << &p << endl; //输出的是p地址
cout << pi <<endl; //输出的是p地址
cout << *pi << endl; //输出的是i地址
cout << **pi << endl; //输出的值2

这就是指针的特性,记住这几点就行
1:指针*p中的p指向的是地址,*p指向的是变量。如果是**p也是这个道理,但是你要这样理解
*(*p)此处的(*p)等于上面的p
2:指针也是一个变量,象int i等一样。是变量就肯定能通过&p,&i取得变量的值。
pagechen 2006-02-16
  • 打赏
  • 举报
回复
cout << p << endl; //输出的是i地址
cout << *p << endl; //输出的值2
cout << &p << endl; //输出的是p地址
cout << pi <<endl; //输出的是p地址
cout << *pi << endl; //输出的是i地址
cout << **pi << endl; //输出的值2

如果你自己得出了“//”后面的结论,应该对指针初步了解了。
所以我对lz发题的动机表示疑惑!!!!!!

现在的可视化环境都可以调试,调试一下,跟踪几个变量,就一切都明白了

64,648

社区成员

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

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