C语言教程:通过值和引用函数

2018-10-0707:56:45编程语言入门到精通Comments2,662 views字数 1636阅读模式

将参数值或数据传递给C语言函数有两种方法:通过值调用和通过引用调用。原始值在通过值调用时不修改,但通过引用调用时,在函数中可进行修改。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6422.html

C语言教程:通过值和引用函数文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6422.html

下面将分别讲解如何通过值调用和通过引用调用,并用使用示例逐个调用演示执行。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6422.html

通过值调用

在通过值调用函数时,原始值不被修改。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6422.html

在通过值调用时,传递给函数的值由函数参数在堆栈内存位置中本地存储。如果更改函数参数的值,则仅对当前调用函数中的值进行临时更改。它不会改变调用者方法(如:main())中的变量的值。即:函数只是使用参数值的一个副本,函数执行完成副本删除,而原始值不会有任何影响。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6422.html

我们试着通过下面的例子来了解C语言中的通过值调用的概念,首先创建一个工程:function-call-by-value-reference,并在这个工程下创建一个源文件:call-by-value.c,其代码如下所示-文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6422.html

#include <stdio.h>  

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

执行上面示例代码,得到以下结果 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6422.html

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

通过引用调用

在通过引用的调用中,原始值可被修改并反映到外部调用者。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6422.html

这里,使用值的地址传递到函数中,所以实际和形式的参数共享相同的地址空间。 因此,函数内部的值被改变,都会反映在函数内部和外部,因为函数内部和外部此时都指向参数的地址空间。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6422.html

注意:要了解通过引用调用,您必须具有指针的基本知识。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6422.html

让我们通过下面的例子来尝试理解C语言中通过引用调用的概念,创建一个源文件:call-by-reference.c,其代码如下所示-文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6422.html

#include <stdio.h>  

// 定义函数,注意这里的参数名称前加了一个星号(*)
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

执行上面示例代码,得到以下结果 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6422.html

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语言中通过值调用和通过引用调用之间的差异

通过值调用通过引用调用
将值的副本传递给函数将值的地址传递给函数
函数内的更改不会反映在函数外函数内部的改变也反映在函数的外部
将在不同的内存位置创建实际和正式的参数将在相同的内存位置创建实际和正式的参数
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6422.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/6422.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定