函数的值传递和地址传递的差别(C语言)


值传递和地址传递的差别

1.值传递

代码部分

#include 

int swap(int x, int y);  //函数声明

int main()
{
    int a, b;
    printf("请输入数字 a,b:");
    scanf("%d,%d", &a, &b);
    swap(a, b);  //函数调用
    printf("交换后数字 a=%d,b=%d\n", a, b);
    return 0;
}

int swap(int x, int y)  //函数定义
{
    int temp;
    temp = x;
    x = y;
    y = temp;
    return 0;
}

验证部分

2.地址传递

代码部分

#include 

int swap(int *x, int *y);  //函数声明

int main()
{
    int a, b;
    printf("请输入数字 a,b:");
    scanf("%d,%d", &a, &b);
    swap(&a, &b);  //函数调用
    printf("交换后数字 a=%d,b=%d\n", a, b);
    return 0;
}

int swap(int *x, int *y)  //函数定义
{
    int temp;
    temp = *x;
    *x = *y;
    *y = temp;
    return 0;
}

验证部分

3.结论

实参:函数调用时传入的参数,例如:swap(&a, &b);中的参数a,b
形参:函数定义时的参数,例如:int swap(int *x, int *y);中的参数x,y

函数的值传递不能改变传入的实参,而地址传递可以改变传入的实参

转载请注明出处