【C语言函数调用详解】——传值调用&传址调用

我们已经知道了如何调用一个函数,如何传参(分为实参和形参),知道了形参实例化之后是实参的一份临时拷贝。

但是,函数的调用又分为两种方式,传值调用传址调用,接下来我们就一起来学习一下什么是传值调用,什么是传址调用!!!

🐸一.传值调用

什么是传值调用呢?顾名思义,传值调用就是直接将实参的值传递给形参。

这样形参和实参的值是一样的,但是函数的形参和实参分别占有不同的内存块,实参是一个独立的个体,形参也是一个独立的个体,只是形参的值与实参相同。
但实际两者之间并没有建立起真正的联系,对形参的修改不会影响实参。

来举个例子:
我们来写一个函数交换两个变量的内容:

#include <stdio.h>
//实现成函数,但是不能完成任务
void Swap1(int x, int y) {
	int tmp = 0;
	tmp = x;
	x = y;
	y = tmp;
}

int main()
{
	int num1 = 1;
	int num2 = 2;
	Swap1(num1, num2);
	printf("Swap1::num1 = %d num2 = %d\n", num1, num2);
	return 0;
}

我们来简单分析一下这段代码:
在这里插入图片描述

根据我们的分析,传值调用好像不能达到交换num1,num2的目的,我们看看结果是什么样的:

在这里插入图片描述

因此,传值调用,要想在函数内部交换两个变量的值,是不可行的。
那要怎么做呢?这里就需要传址调用。

🐵二.传址调用

那什么是传址调用呢?这里的“址”指的是地址。

传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。

这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操作函数外部的变量。

那现在我们用传址调用的方法对上面的函数重新进行实现:

#include <stdio.h>
//正确的版本
void Swap2(int* px, int* py) {
	int tmp = 0;
	tmp = *px;
	*px = *py;
	*py = tmp;
}

int main()
{
	int num1 = 1;
	int num2 = 2;

	Swap2(&num1, &num2);

	printf("Swap2::num1 = %d num2 = %d\n", num1, num2);
	return 0;
}

对代码进行一下分析:
在这里插入图片描述

这次我们再来看看结果:
在这里插入图片描述

所以,传址调用可以让实参和形参建立起真正的联系。

以上就是对函数调用的两种方式,传值调用和传址调用的介绍,欢迎大家指正,我们一起进步!!!

  • 33
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YIN_尹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值