C语言求输出结果,#include"stdio.h"main(){int a[2]={3,5},b[2]={3,5};swap1(a);swap2(b[0],b[1])在线等

#include"stdio.h"
main()
{int a[2]={3,5},b[2]={3,5};
swap1(a);swap2(b[0],b[1]);
printf(“%d%d%d%d\n”,a[0],a[1],b[0],b[1]);
}
void swap1(int c[ ])
{int t;
t=c[0];c[0]=c[1];c[1]=t;
}
void swap2(int c0,int c1)
{int t;
t=c0;c0=c1;c1=t;
}
输出结果 5 3 3 5 求高手解释 为何不是5 3 5 3?

void swap2(int c0,int c1) 这里只是将3 5这两个数传递到swap2函数中,在子函数中进行了两数交换,而主函数中的数据没有变化,故b[0] b[1]依然是原来的数。
{int t;
t=c0;c0=c1;c1=t;
}

void swap1(int c[ ]) 这里形象来说,好比传进来一个盒子,盒子分左右两格,本函数是将盒子里的东西左右进行了调换,因此,函数返回后,a这个盒子里的内容发生了变化
{int t;
t=c[0];c[0]=c[1];c[1]=t;
}
因此,结果是5335
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-10
C语言中参数传递是按值传递的,swap1的参数传递是把a的地址复制给c,这样c[0]就是a[0],c[1]就是a[1],swap2传值时是分别把数组b的两个元素复制给swap2的两个局部变量,操作的只是这两个局部变量,与b数组无关。
第2个回答  2013-07-10
swap2的参数是传值的,要想改变应该申明为引用或者指针
相似回答