| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1035 人关注过本帖
标题:让人头疼的指针问题
只看楼主 加入收藏
zmrfff
Rank: 1
等 级:新手上路
帖 子:64
专家分:0
注 册:2008-10-21
结帖率:95.83%
收藏
已结贴  问题点数:20 回复次数:13 
让人头疼的指针问题
最近在学习指针,但学的有点糊涂了,这道题怎么都分析不清楚,还望哪位高手指点一下,能让我理清思路,想清楚前因后果,谢谢啦!
程序如下:
#include <stdio.h>
void main()
{
    int x=1,y=2,*p1,*p2,*t;
         p1=&x,p2=&y;
    t=p1;p1=p2;p2=t;
    printf("%d %d\n",x ,y);
    printf("%d %d\n",*p1 ,*p2);
}
我上机运行了一下,结果为1,2   2,1
我不明白的是,为什么输出 x,y 值为1,2,x不就是*p1,y不就是*p2么?为什么输出结果不是2,1呢?
搜索更多相关主题的帖子: 指针 头疼 
2009-08-08 09:19
n65807808
Rank: 1
等 级:新手上路
帖 子:3
专家分:1
注 册:2007-10-9
收藏
得分:1 
#include <stdio.h>
void main()
{
    int x=1,y=2,*p1,*p2,*t;
         p1=&x,p2=&y;
    t=p1;p1=p2;p2=t; //这一步,把p1和p2的地址互换了
    printf("%d %d\n",x ,y);
    printf("%d %d\n",*p1 ,*p2);
}
2009-08-08 10:22
robbenmessi
Rank: 1
等 级:新手上路
帖 子:11
专家分:1
注 册:2008-7-23
收藏
得分:1 
“t=p1;p1=p2;p2=t;”互换了指针指向的地址,原来p1指向x,p2指向y。现在p2指向x,p1指向y
2009-08-08 11:54
tzzy
Rank: 1
来 自:皖浙
等 级:新手上路
帖 子:17
专家分:6
注 册:2009-8-7
收藏
得分:1 
你的代码:
int x=1,y=2,*p1,*p2,*t;
p1=&x,p2=&y;
t=p1;p1=p2;p2=t;
我来说明一下:你将x的地址赋给了p1,y的地址赋给了p2,现在 *t,t=p1;p1=p2;p2=t;  这只是 将p1,p2交换,而
x和y的值并没有改变 ,因此输出的还是1,2;改变的只是 p1和p2,为 2,1.
只需要改为 :int t; t=*p1;*p1=*p2;*p2=t;即可。。。


即使没有。。明天依然。。。
2009-08-08 13:39
黒渍
Rank: 2
等 级:论坛游民
帖 子:57
专家分:41
注 册:2009-7-16
收藏
得分:1 
t=p1;p1=p2;p2=t;仅仅是地址的传递。。。对X,Y的值没有改变。。。

踏实学C
/*我的编程飞信群:9401431 互相学习,共同进步*/
2009-08-08 22:45
mancome
Rank: 2
等 级:论坛游民
帖 子:5
专家分:12
注 册:2009-8-2
收藏
得分:1 
我理解了,帮顶!!

努力的学习!!!
2009-08-08 23:07
zmrfff
Rank: 1
等 级:新手上路
帖 子:64
专家分:0
注 册:2008-10-21
收藏
得分:0 
那么在printf("%d %d\n",x ,y);  这条语句中,是不是可以理解为x=*p2,y=*p1 ?说实话我还是不大明白><
2009-08-08 23:29
soler
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:181
专家分:1077
注 册:2005-7-16
收藏
得分:1 
int x=1,y=2,*p1,*p2,*t;
         p1=&x,p2=&y;
    t=p1;p1=p2;p2=t;

对于你这段代码,你想实现x和y只的交换
这个地方我们做个假设(仅仅只是假设啊,程序里面不能随便给指针赋我这样随便写的地址值的哦)
 p1=&x=0x0001,p2=&y=0x1000;

0x0001里面存的是变量x,x=1
0x1000里面存的是变量y,y=2  这两个是程序开始执行到int x,y;时给x,y分配的内存空间的地址,在main(){}没结束之前是固定不变的。
通过指针,t=p1=0x0001
p1=p2=0x1000 (这个地址里存的是y,y=2)也就是说现在*p1=y=2
p2=t=0x0001  (这个地址里存的是x,x=1)            *p2=x=1
仅仅只是指针的指向发生了变化,但是运行时程序给x,y分配的内存空间的地址没有发生变化。并且里面的值也没发生改变。
因为你没对地址里的值进行任何操作。

[ 本帖最后由 soler 于 2009-8-10 21:58 编辑 ]
2009-08-09 00:13
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
收藏
得分:1 
喜欢琢磨的孩子真是很不错呀

对于你的问题,我想通过三个 指针来解释,等你把这三个指针弄明白了,这个就不成问题了

1:int const *p1;

2:int * const p2;

3:int const * const p3;

请问 p1, p2, p3 这三个指针有什么区别?


问题的解,我不会告诉你们,但是我希望你们自己动手试验。同时我可以告诉你们问题的出处是《C和指针》中文版 第39页

//我在跟我侄儿讲指针的时候就是通过这个跟他解释清楚的

自我放逐。。。
2009-08-09 15:18
CCVC果冻爽
Rank: 4
等 级:业余侠客
帖 子:116
专家分:209
注 册:2009-7-31
收藏
得分:1 
看完就懂喽

C_C++指针经验总结.pdf (214.41 KB)
2009-08-09 17:23
快速回复:让人头疼的指针问题
数据加载中...
 
   



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

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