| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4237 人关注过本帖, 1 人收藏
标题:[求助]二级指针
只看楼主 加入收藏
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 

好!
不把你们弄明白,我今儿就不吃饭。
一个*表示另一个指针,再加一个*符表示另一个指针。
也就是两个**的指针指向一个*的指针。(请确定你已经了解。)
**p它是指向*p的。(了解!)
*p是指向&i的。(明白!)
为了更好区分,两个**的指针用B来代替,一个*的指针用A来代替。
*B++;//B原是指向A的地址,++了后就指向A所指向的地址&i.(B->A->&i).
那么再*B也就是取i的值,也就是49了。


=×&D o I p R e E n C g T l X&×=
2006-04-21 14:36
柳儿
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:1830
专家分:30
注 册:2004-9-23
收藏
得分:0 

#include <iostream>
using namespace std;
void f(int ** p)
{
cout<<"*p = "<<(long)*p<<endl;
cout <<"p=" <<(long)p<<endl;
*p++;
cout <<"p=" <<(long)p<<endl;
cout<<"*p = "<<(long)*p<<endl;//?里?什??出的是?49,而上面?出的是地址??

}
int main()
{
int i =49;
double j = 50;
int * ip = &i;
cout<<"ip = "<<(long)ip<<endl;
f(&ip);
return 0;
}
那问一下,这个为啥没打出来49呢?


成功会使人骄傲。如果你骄傲自大,你就会停止学习。不学习,人就停止了进步
2006-04-21 14:43
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 

#include <iostream>
using namespace std;
void f(int ** p)
{
cout<<"*p = "<<(long)*p<<endl;
cout <<"p=" <<(long)p<<endl;
*p++;
cout <<"p=" <<(long)p<<endl;
cout<<"*p = "<<(long)*p<<endl;//?里?什??出的是?49,而上面?出的是地址??

}
int main()
{
int i =49;
//楼上的姐姐这里可是多了一句呖,double j = 50;
//已经不是原来的那个程序了。

double j = 50;
int * ip = &i;
cout<<"ip = "<<(long)ip<<endl;
f(&ip);
return 0;
}


=×&D o I p R e E n C g T l X&×=
2006-04-21 15:13
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 
Very Sorry.
指针++是指向它的下一个地址,虽然很不想认,但的确是这样。
但存储不是连接的,和以前的观点还是支持的。

=×&D o I p R e E n C g T l X&×=
2006-04-21 15:28
柳儿
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:1830
专家分:30
注 册:2004-9-23
收藏
得分:0 
当然不是,就为了验证你说的最重要的那句“最重要是这一句,首先++,也就为得到**p所指向的地址,为*p.”

如果后面加入其他的代码,为啥++后不一样了呢?我觉得楼主的程序能出49,只不过是因为内存分配连着罢了,如果不是连着的,是不会出现49的。至于是谁和谁连着,我还没太确定。

[此贴子已经被作者于2006-4-21 15:34:28编辑过]


成功会使人骄傲。如果你骄傲自大,你就会停止学习。不学习,人就停止了进步
2006-04-21 15:30
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 
指针的分配不是连着的。出现连着的情况是为了效率。

=×&D o I p R e E n C g T l X&×=
2006-04-21 15:36
柳儿
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:1830
专家分:30
注 册:2004-9-23
收藏
得分:0 
在VC里跟了一下,进入f()里的*p++,先执行p++,移动到的地址正好等于i的地址,所以打印出来就是49。进函数的那些汇编,不好意思,我还看不懂为什么是那个样子。

成功会使人骄傲。如果你骄傲自大,你就会停止学习。不学习,人就停止了进步
2006-04-21 15:47
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 
这个问题已经白到不能再白了,还要讨论吗?

=×&D o I p R e E n C g T l X&×=
2006-04-21 16:06
柳儿
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:1830
专家分:30
注 册:2004-9-23
收藏
得分:0 
因为你说存储不是连着的啊。我想验证一下。

成功会使人骄傲。如果你骄傲自大,你就会停止学习。不学习,人就停止了进步
2006-04-21 16:08
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 
但请注意一点:指针与变量的分配是两个不同。
请验证吧!

=×&D o I p R e E n C g T l X&×=
2006-04-21 16:12
快速回复:[求助]二级指针
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035661 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved