在C语言中,函数的形参与实参之间的值传递是什么意思?函数调用时如主函数中为swap(a,b),而从函数为

swap(*x,*y),为什么主函数不能用swap(*a,*b)呢?

以int 型举例


void Swap(int *a, int * b)
{
    int temp = *a;
   *a = *b;
 *b = temp;
}
void Swap1(int a, int b)
{
    int temp = a;
   a =b;
    b = temp;
 
}

Swap(int *, int *);称之为实参 实际传递的是 a和 b 的地址 啊 , 在调用a与b 的值(*a)使用的是原来的数 下面的  x,y; a , b 的值是x与y 的内存地址
swap1(int ,int); 称之为形参 实际传递的是 a 和b 的值,这里的a和b 与xy没关系, 只是x与y 的一个副本。

int swap_test()
{
    int x,int y;
    x = 3; y = 5;
    
    Swap(&x,&y);
    //此时x = 5; y = 3;
    Swap1(x,y);
     //此时x = 5; y = 3;
     
     return 1;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-09-23
每个函数 会给变量 重新做一个副本 比如
int a,b;
void wap(int a,int b); 可以用 wap( & a,& b) 取 a,b 的地址 传递 这样不会创建新变量
{
......
}

void wap (int a,int b) // 这里a,b 的地址和全局main的 a,b地址不同 只是一个副本 修改是不会影响主函数
{
a=a+b;
b = a - b;
a = a - b;
}
相似回答