📜  C中按值调用和按引用调用(1)

📅  最后修改于: 2023-12-03 15:00:11.384000             🧑  作者: Mango

C中按值调用和按引用调用

在C中,有两种方式可以将参数传递给函数,即按值调用和按引用调用。这两者的主要区别在于参数在传递过程中是如何被复制或引用的。

按值调用

按值调用是指将参数作为值传递给函数。在函数内部,这些参数的值被复制到函数的局部变量中,并在函数执行完毕后被销毁。按值调用传递的是参数的副本而不是参数本身,因此对函数内所做的修改不会影响到函数外的值。

以下是一个按值调用的例子:

#include <stdio.h>

void add(int x, int y)
{
    x = x + y;
}

int main()
{
    int a = 10, b = 20;
    add(a, b);
    printf("a = %d, b = %d\n", a, b);
    return 0;
}

输出结果为:

a = 10, b = 20
按引用调用

按引用调用是指将参数作为指针传递给函数。在函数内部,这些参数的地址被复制到函数的形参中,函数内部使用指针操作外部变量的值。按引用调用可以改变指针所指向的值,从而影响到函数外的值。

以下是一个按引用调用的例子:

#include <stdio.h>

void add(int *x, int *y)
{
    *x = *x + *y;
}

int main()
{
    int a = 10, b = 20;
    add(&a, &b);
    printf("a = %d, b = %d\n", a, b);
    return 0;
}

输出结果为:

a = 30, b = 20

在这个例子中,a和b的地址被传递给了add函数。函数内使用指针操作外部变量的值,并改变了a的值。

结论

按值调用传递的是参数的副本,是一种安全而高效的方式。按引用调用可以改变指针所指向的值,但需要确保代码正确性,特别是指针为空或指向未初始化的内存时,需要加入有效性检查来保证程序的正确性。在C中,按值传递和按引用传递根据实际的使用场景来选择,而不是一味的选择其中一种方式。