C语言如何通过值和引用函数?

    作者:课课家教育更新于: 2020-02-10 15:54:01

    大神带你学编程,欢迎选课

    C程序中函数的数目实际上是不限的,如果说有什么限制的话,那就是,一个C程序中必须至少有一个函数,而且其中必须有一个并且仅有一个以main为名,这个函数称为主函数,整个程序从这个主函数开始执行。

    其实,将参数值或数据传递给C语言函数有两种方法:通过值调用和通过引用调用。原始值在通过值调用时不修改,但通过引用调用时,在函数中可进行修改。

    C语言如何通过值和引用函数?_C语言_编程语言_C语言课程_课课家

    下面将分别讲解如何通过值调用和通过引用调用,并用使用示例逐个调用演示执行。

    通过值调用

    在通过值调用函数时,原始值不被修改。

    在通过值调用时,传递给函数的值由函数参数在堆栈内存位置中本地存储。如果更改函数参数的值,则仅对当前调用函数中的值进行临时更改。它不会改变调用者方法(如:main())中的变量的值。即:函数只是使用参数值的一个副本,函数执行完成副本删除,而原始值不会有任何影响。

    我们试着通过下面的例子来了解C语言中的通过值调用的概念,首先创建一个工程:function-call-by-value-reference,并在这个工程下创建一个源文件:call-by-value.c,其代码如下所示-

    #include   
    
    void change(int num) {
        printf("Before adding value inside function num=%d \\n", num);
        num = num + 10;
        printf("After adding value inside function num=%d \\n", num);
    }
    
    int main() {
        int x = 10;
        // 更新之前参数x的值
        printf("Before function call x=%d \\n", x);
        change(x); // passing value in function  
        // 更新之后参数x的值
        printf("After function call x=%d \\n", x);
    
        return 0;
    }
    
    C

    执行上面示例代码,得到以下结果 -

    shell code-toolbar">Before function call x=10
    Before adding value inside function num=10
    After adding value inside function num=20
    After function call x=10
    
    Shell

    通过引用调用

    在通过引用的调用中,原始值可被修改并反映到外部调用者。

    这里,使用值的地址传递到函数中,所以实际和形式的参数共享相同的地址空间。 因此,函数内部的值被改变,都会反映在函数内部和外部,因为函数内部和外部此时都指向参数的地址空间。

    注意:要了解通过引用调用,您必须具有指针的基本知识。

    让我们通过下面的例子来尝试理解C语言中通过引用调用的概念,创建一个源文件:call-by-reference.c,其代码如下所示-

    #include   
    
    // 定义函数,注意这里的参数名称前加了一个星号(*)
    void change2(int *num) {
        printf("Before adding value inside function num=%d \\n", *num);
        (*num) += 100;
        printf("After adding value inside function num=%d \\n", *num);
    }
    
    int main() {
        int x = 200;
    
        printf("Before function call x=%d \\n", x);
        // 注意,下面传递的参数名称前加了一个符号(&)
        change2(&x);// passing reference in function  
        printf("After function call x=%d \\n", x);
    
        return 0;
    }
    
    C

    执行上面示例代码,得到以下结果 -

    Before function call x=200
    Before adding value inside function num=200
    After adding value inside function num=300
    After function call x=300
    
    Shell

    C语言中通过值调用和通过引用调用之间的差异

    通过值调用通过引用调用
    将值的副本传递给函数 将值的地址传递给函数
    函数内的更改不会反映在函数外 函数内部的改变也反映在函数的外部
    将在不同的内存位置创建实际和正式的参数 将在相同的内存位置创建实际和正式的参数

    C语言函数是一种函数,用来编译C语言,所在库函数为ctype.h,分为分类函数,数学函数,目录函数,进程函数,诊断函数,操作函数等。

课课家教育

未登录