C语言的一道题。请告诉我结果,为什么是这个结果。

[复制链接]
查看11 | 回复4 | 2010-9-8 21:32:59 | 显示全部楼层 |阅读模式
#include
void fun(int *a,int *b)
{
int *c;
c=a;a=b;b=c;
}
main()
{
int x=3,y==5,*p=&x,*q=&y;
fun(p,q); printf(%d,%d,".*p,*q);
fun(&x,&y); printf("%d,%d\n,*p,*q);
}
答案是3,5,3,5
为什么啊?

回复

使用道具 举报

千问 | 2010-9-8 21:32:59 | 显示全部楼层
因为这个函数void fun(int *a,int *b){ int *c; c=a;a=b;b=c;}不能把交换的结果带回来。所以函数调用没调用,不影响p,q,x,y.如果改成:void fun(int *a,int *b){ int c; c= *a; *a= *b; *b=c;}结果是:5,3,3,5 -- 第一次交换成5,3,第二次交换,换回到3,5.(你程序中有书写错误,自己更正--例如漏引号)。
回复

使用道具 举报

千问 | 2010-9-8 21:32:59 | 显示全部楼层
其实这两个函数都是一样的问题。
你的函数在创建时,两个参数都新建了一个分别指向p,q的指针,最后函数里交换的是a,b两个指针的值,也就是说现在a指向5,b指向3,a,b的值变化对p,q是不影响的,就好比是传值交换一样。不知道你懂了没。。。
回复

使用道具 举报

千问 | 2010-9-8 21:32:59 | 显示全部楼层
对于调用者来说,fun函数除了浪费时间(好听点可以叫延时),没有其他用处。Over!
回复

使用道具 举报

千问 | 2010-9-8 21:32:59 | 显示全部楼层
对于fun(p,q),fun()虽然传递的参数是指针,但内部只是将地址做交换,并没有交换地址内部的值,而且没有返回值,执行完后不影响实参。对于fun(&x,&y)中p=&x,q=&y,结果和fun(p,q)一样,也是相同的道理。如果fun()内部的语句是*c=*a;*a=*b;*b=*c,那交换的就是指针所指向的值,操作结果就会影响实参了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行