| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2060 人关注过本帖
标题:[原创]三言两语,妙解《指针》的附加例题。
只看楼主 加入收藏
hackerjiang
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:地球
等 级:版主
威 望:3
帖 子:780
专家分:111
注 册:2007-4-27
结帖率:100%
收藏
 问题点数:0 回复次数:20 
[原创]三言两语,妙解《指针》的附加例题。
*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 http://www.bc-cn.net
*/ 作者: hackerjiang E-mail:hackerjiang@qq.com QQ:298218699
*/ 时间: 2007-8-10 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------




刚才发色情帖,被扣了金钱,魅力等,遂决心改恶从良!这不,我又写一帖,望成精华,将功补过!

有一个这样的程序:它的作用是交换a,b的值。
#include <stdio.h>
void jh(int x,int y)
{
int temp;
temp=x;
x=y;
y=temp;
}
main()
{
int a,b;
scanf("a=%d,b=&d",&a,&b);
printf("a=%d,b=&d",a,b);
jh(a,b);
printf("a=%d,b=&d",a,b);
getch();
return 0;
}

我们输入 a=2,b=4
输出:
a=2,b=4
a=2,b=4

结果是让我们失望了,为什么第二行不是a=4,b=2呢?

再看看这个:
void jh(int *x,int *y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
main()
{
int a,b,*p-a,*p-b;
p-a=&a;
p-b=&b;
scanf("a=%d,b=&d",p-a,p-b);
printf("a=%d,b=&d",a,b);
jh(p-a,p-a);
printf("a=%d,b=&d",a,b);
getch();
return 0;
}
我们输入 a=2,b=4
输出:
a=2,b=4
a=4,b=2

这是怎么会事呢?

其实,程序一中调用的是a,b的值,
a,b的值只是传给型参x,y,
当函数调用完后马上就释放了,没有达到效果。

过程:

a值(2)—传给—X(2)↓ ↑→X(4)
→交换← 〓释放〓 结果:a还是2,b还是4
b值(4)—传给—Y(4)↑ ↓→Y(2)

而第二个是传地址(事实上我也不知道该怎么讲清楚```
第二个是“锁定”地址,进行值的交换。

还拿邮箱做比方!

第一个:
从邮箱A和邮箱B中拿到信件(值),给邮箱X和邮箱Y,邮箱X和邮箱Y交换后就被我军导弹消灭!
过程中并未涉及A,B的交换。

第二个:
邮箱X和邮箱Y分别记录邮箱A和邮箱B的地址。然后从邮箱X和邮箱Y中调用邮箱A和邮箱B的地址,并用temp作为中介交换

````````我讲清了吗? 我觉得还是没有```

不管怎样,大家还是支持一下吧!


[此贴子已经被作者于2007-8-10 20:51:10编辑过]

搜索更多相关主题的帖子: 指针 例题 hackerjiang target 
2007-08-10 20:38
leeldy
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2007-8-2
收藏
得分:0 
good

↑↑↑↑↑↑↑↑如果我错了,请改正我的错误↑↑↑↑↑↑↑↑

2007-08-10 20:47
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

楼主,你还是踏踏实实学些基本的东西,抛去虚荣心,不要精华不精华,说实在的,你的C基础知识还差得远.


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2007-08-10 21:34
Skai
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2006-8-30
收藏
得分:0 
老大终于开了句口

2007-08-10 21:43
hackerjiang
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:地球
等 级:版主
威 望:3
帖 子:780
专家分:111
注 册:2007-4-27
收藏
得分:0 
wo ye shi chu xue a

(づ ̄ 3 ̄)づ
2007-08-10 21:59
hackerjiang
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:地球
等 级:版主
威 望:3
帖 子:780
专家分:111
注 册:2007-4-27
收藏
得分:0 
以下是引用Knocker在2007-8-10 21:34:36的发言:

楼主,你还是踏踏实实学些基本的东西,抛去虚荣心,不要精华不精华,说实在的,你的C基础知识还差得远.

我认为精华是对我劳动成果的肯定。


(づ ̄ 3 ̄)づ
2007-08-10 22:01
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

一个写C语言很基础的问题--指针--的贴子,而且有多处错误,被加上精华,是你的悲哀还是论坛的悲哀?


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2007-08-10 22:16
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
收藏
得分:0 
以下是引用Knocker在2007-8-10 22:16:11的发言:

一个写C语言很基础的问题--指针--的贴子,而且有多处错误,被加上精华,是你的悲哀还是论坛的悲哀?

比如说:scanf("a=%d,b=&d",&a,&b);


自我放逐。。。
2007-08-10 22:19
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
Knocker老大说的很对,楼主还是扎扎实实学习吧

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-08-10 22:59
I喜欢c
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:64
帖 子:1749
专家分:0
注 册:2007-3-2
收藏
得分:0 
以下是引用Knocker在2007-8-10 21:34:36的发言:

楼主,你还是踏踏实实学些基本的东西,抛去虚荣心,不要精华不精华,说实在的,你的C基础知识还差得远.

同意...


 我是指针,却丢失了目标地址!          我是循环,却缺少了结束条件!      我是函数,却没有人来调用!   
2007-08-11 13:20
快速回复:[原创]三言两语,妙解《指针》的附加例题。
数据加载中...
 
   



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

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