C语言求助

[复制链接]
查看11 | 回复5 | 2011-6-9 17:40:37 | 显示全部楼层 |阅读模式
(3) 写出下列程序的运行结果:
#include
void fun(int a,int b)
{
int t;
t=a;a=b;b=t;
}
int main(void)
{int c[10]={1,2,3,4,5,6,7,8,9,0},i;
for(i=0;i<10;i+=2) fun(c,c[i+1]);
for(i=0;i<10;i++) printf("%d,",c);
printf("\n");
return 0;
}
结果:1,2,3,4,5,6,7,8,9,0
这是为什么?fun()不是数值交换吗?

回复

使用道具 举报

千问 | 2011-6-9 17:40:37 | 显示全部楼层
这样的fun()是无法实现a和b的交换的。当你调用完fun(a, b)后,将会发现a,b的值没有改变。调用fun(a,b)只是将a,b的值传入了fun函数,而函数fun内部的交换,只是交换了fun(int a, int b)中的形参a和b的值,但是并未改变外部实参a,b地址中的值。 想要实现交换,你可以这样做试试: void fun(int *a, int *b){
int t;
t = *a;
*a = *b;
*b = t;}调用可以用fun(&a, &b);这样就可以实现交换了。...
回复

使用道具 举报

千问 | 2011-6-9 17:40:37 | 显示全部楼层
这是因为,fun传递是形参,若想改变,可以使用:void fun(int &a,int &b);或者使用指针void fun(int *a,int *b);...
回复

使用道具 举报

千问 | 2011-6-9 17:40:37 | 显示全部楼层
传址和传值的问题。。你的做法是传值:实际上是重新分配一个变量。作用域为子函数内部。确实执行了交换。但是函数结束以后变量被系统回收。实际上主函数的实参并没有改变。...
回复

使用道具 举报

千问 | 2011-6-9 17:40:37 | 显示全部楼层
要用指针void fun(int *a,int *b){ int t; t = *a; *a = *b; *b = t;}int main(void){ int c[10]={1,2,3,4,5,6,7,8,9,0}; int i; for(i=0;i<10;i+=2) fun(&c,&c[i+1]); for(i=0;i<...
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行