【C语言学习】自定义函数传值调用与传址调用

函数(子程序),由于库函数有限,所以需要大量自定义函数。

自定义函数组成:

ret_type fun_name(para)
	{
		statement;//语句项,整个大括号包括内容为函数体。
	}
	//ret_type 返回类型
    //fun_name 函数名
	//para 函数参数(形式参数)

例子1,写一个函数可以找出两个整数中的最大值。

#include <stdio.h>
int get_max(int x, int y)//形式参数(形参)x,y,只有函数被调用过程中才会实例化(分配内存单元),函数调用完成后自动销毁。(临时拷贝)
//函数形参和实参命名可以相同
{
	int z;
	if (x = y)
		z = x;
	if (x < y)
		z = y;
	return z;//返回较大值z
}
int main()
{
	int a = 10;
	int b = 20;
	int max = get_max(a, b);//调用函数,返回值进入z中
    //使用传值调用
    //实际参数(实参)a,b,可以为常量,变量,表达式,函数等,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参
	printf("%d\n", max);
	return 0;
 }

例子2,写一个函数,交换两个整型变量的值。

错误示例:

#include <stdio.h>
void swap(int x, int y)
{
	int z = x;
	x = y;
	y = z;
}
int main()
{
	int a = 10;
	int b = 20;
	swap(a, b);
	printf("%d %d\n", a, b);

打印结果:

 原因:swap(a,b)采用传值调用。实参a,b传送给函数后,函数创建了名为x,y的临时内存块(形参),用于分别存放a,b,函数的形参(x,y)和实参(a,b)分别占有不同的内存块,对形参修改不会改变实参。

正确示例:

#include <stdio.h>
void swap(int* pa, int* pb)//整型指针变量,pa,pb用于存放传入的地址(a,b的地址)
{
	int z = *pa;//*pa解释:通过pa里面存放的地址(变量a的地址),找到它所指向的对象(a),即*pa=a
	*pa = *pb;
	*pb = z;
}
int main()
{
	int a = 10;
	int b = 20;
	swap(&a, &b);//采用传址调用,将函数外部创建的变量的内存地址传递给函数参数,这种传参方式可以让函数与函数外边的变量建立起真正的联系,也就是函数内部可以直接操作函数外部的变量
	printf("a=%d b=%d\n", a, b);
}

打印结果:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值