[原创]三言两语,妙解《指针》的附加例题。
*/ --------------------------------------------------------------------------------------*/ 出自: 编程中国 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编辑过]