前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C语言函数调用详解】——传值调用&传址调用

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

作者头像
YIN_尹
发布2024-01-23 15:36:44
2461
发布2024-01-23 15:36:44
举报
文章被收录于专栏:YIN_尹的博客YIN_尹的博客

🐸一.传值调用

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

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

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

代码语言:javascript
复制
#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的目的,我们看看结果是什么样的:

在这里插入图片描述
在这里插入图片描述

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

🐵二.传址调用

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

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

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

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

代码语言:javascript
复制
#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;
}

对代码进行一下分析:

在这里插入图片描述
在这里插入图片描述

这次我们再来看看结果:

在这里插入图片描述
在这里插入图片描述

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-01-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🐸一.传值调用
  • 🐵二.传址调用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档