当前位置: 代码迷 >> C语言 >> [原创]三言两语,妙解《指针》的附加例题。
  详细解决方案

[原创]三言两语,妙解《指针》的附加例题。

热度:201   发布时间:2007-08-10 20:38:13.0
[原创]三言两语,妙解《指针》的附加例题。
*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 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  

----------------解决方案--------------------------------------------------------
good
----------------解决方案--------------------------------------------------------

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


----------------解决方案--------------------------------------------------------
老大终于开了句口
----------------解决方案--------------------------------------------------------
wo ye shi chu xue a
----------------解决方案--------------------------------------------------------
以下是引用Knocker在2007-8-10 21:34:36的发言:

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

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


----------------解决方案--------------------------------------------------------

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


----------------解决方案--------------------------------------------------------
以下是引用Knocker在2007-8-10 22:16:11的发言:

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

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


----------------解决方案--------------------------------------------------------
Knocker老大说的很对,楼主还是扎扎实实学习吧
----------------解决方案--------------------------------------------------------
以下是引用Knocker在2007-8-10 21:34:36的发言:

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

同意...


----------------解决方案--------------------------------------------------------