C语言中函数间的参数传递本质是单向的变量拷贝是什么意思?这个程序中的函数为什么没用?

#include<stdio.h>
swap(int x, int y);
int main(int argc, char* argv[])
{int a,b;
a=3;b=4;
printf( "%d,%d\n",a,b);
swap (a,b);
printf("%d,%d",a,b);

return 0;
}
swap(int x, int y)
{
int temp;
temp=x;
x=y;
y=temp;
}

函数间的参数传递本质是单向的变量拷贝 这句话值传递函数的参数传值是把当前变量拷贝一份然后传进函数使用,函数中对参数进行的改变不会影响函数外部的变量。
如果需要改变,使用指针传递参数,这样传递的是变量的地址,而不是变量值的拷贝。
swap(int x, int y)没有起到交换的作用就是像上边所说:

在main函数中a=3;b=4;然后swap(a,b);此时进入swap的a,b是重新声明了两个变量,分别是a,b的拷贝。也就是x=a;y=b;然后在函数中进行交换只是交换了x,y的值,对于函数外的a,b根本没起到作用
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-06-09
这个程序是值传递,调用swap时,只将a的值赋给x,b的值赋给y,a与x是不同的两个单元,同理b和y也是两个不同的单元,因此函数中修改x和y的值不会影响a和b的值追问

那要怎么样修改才能实现交换a和b的值呢?

追答

用地址传递的方式,也就是要将a的地址赋给形参,让形参指向变量a所在的内存单元,那么在函数中修改形参指向的单元值就使得变量a的值也发生了变化,上面的程序需要修改以下几个地方:
(1)swap(int x, int y);改为swap(int *x,int *y); 第二行

(2)swap (a,b);改为swap (&a,&b); 第七行

(3)函数定义部分
swap(int x, int y)
{
int temp;
temp=x;
x=y;
y=temp;
}
改为
swap(int *x, int *y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}

本回答被提问者和网友采纳
第2个回答  2014-06-09
这个函数,仅仅是值传递,执行时,相当于:
x = a;
y = b;
temp = x;
x = y;
y = temp;
显而易见,交换的仅仅是x和y的值,根本不会影响到a和b的值,如果需要交换a和b,需要传递他们本身进去,也就是引用,改成:
swap(int & x, int & y)
相似回答