c语言的数组问题,为什么一个数组的值变化,另一个数组的值没变化呢

#include <stdio.h>
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;}
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]);
}
答案是,5 3 3 5

对于swap1函数来说,形参是一个数组,所以调用的时候实参位置为数组名a,这属于“传址”,即swap1执行完之后,内存中原有地址中的内容会发生改变;相反,swap2函数为“传值”,也就是说,当swap2调用完之后,为其形参c0,c1,临时分配的内存地址会被释放,这样的话,原有b[0],b[1]中的内容不会发生改变。这涉及到了函数调用中,传址和传值的区别,具体你可以查阅相关的资料。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-13
swap1传递的是地址,swap2传递的是值。
执行swap1(a)相当于先执行int c[]=a;再执行函数里的其他语句
执行swap2(b[0],b[1])相当于先执行int c0=b[0];int c1=b[1];再执行函数里的其他语句
第2个回答  2012-03-13
c[]相当于指针,swap2 本函数没有任何传出数据,参变量无法带出结果
第3个回答  2012-03-13
因为一个值传递 一个是地址传递
相似回答