c语言调用oracle函数返回值吗,C语言通过值和引用函数

本文详细介绍了C语言中两种传递参数的方法:值调用和引用调用。值调用时,原始值在函数内部不被修改;而引用调用则允许在函数内部修改原始值。通过示例代码,展示了两种调用方式的区别,并解释了如何通过指针实现引用调用。
摘要由CSDN通过智能技术生成

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

4e600b6f25734f38ea75a6ac6db9259f.png

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

通过值调用

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

在通过值调用时,传递给函数的值由函数参数在堆栈内存位置中本地存储。如果更改函数参数的值,则仅对当前调用函数中的值进行临时更改。它不会改变调用者方法(如: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;

}

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

Before function call x=10

Before adding value inside function num=10

After adding value inside function num=20

After function call x=10

通过引用调用

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

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

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

让我们通过下面的例子来尝试理解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;

}

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

Before function call x=200

Before adding value inside function num=200

After adding value inside function num=300

After function call x=300

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

通过引用调用

将值的副本传递给函数

将值的地址传递给函数

函数内的更改不会反映在函数外

函数内部的改变也反映在函数的外部

将在不同的内存位置创建实际和正式的参数

将在相同的内存位置创建实际和正式的参数

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值