【初见函数】

在这里插入图片描述

欢迎来到Cefler的博客😁
🕌博客主页:那个传说中的man的主页
🏠个人专栏:题目解析
🌎推荐文章:题目大解析(更新ing)

在这里插入图片描述


👉🏻函数定义与常见函数

定义:
1.负责完成某项特定任务,具有相对的独立性
2.一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。
C语言中常见函数类型:
1.IO函数(输入输出函数)
2.字符串操作函数
3.内存操作函数
3.时间/日期函数
4.数学函数
5.其它库函数

👉🏻函数大致写法

我们举个例子来说明:👇🏻👇🏻

int GetMax(int x, int y)
{
	int z = x > y ? x : y;
	return z;
}
int main()
{
	int a, b;
	scanf("%d %d", &a, &b);
	int res = GetMax(a, b);
	printf("%d\n", res);
	return 0;
}

若我们想要从两个数中,输出其中的较大值,我们可以通过创建一个能够实现提取最大数功能的这么一个函数。
在这里插入图片描述
我们创建一个函数,函数的组成是:函数名(参数)如上图GetMax就是函数名,a,b就是参数(这里我们叫做实参)。而接下来,我们就要去书写函数的内容了,我们一般在main函数上方开始书写。
![在这里插入图片描述](https://img-blog.csdnimg.cn/9d0795b519d94961aa9c5fb2e6794cce.png在这里插入图片描述

我们首先要创建新的变量去接收a,b,而这里我们创建了x,y变量(这里我们叫形参),然后因为我们的结果是整型,所以在函数左边记得要补充返回类型

关于实参和形参
1.实参:实参可以是常量,变量,表达式,函数。但无论是哪种类型,在进行函数调用时,都必须要有确定有意义的值
2.形参:形式参数是指函数名中的创建的新变量,而形参只有在被函数调用的时候才分配内存单元,而在函数调用完成后就自动销毁了,所以形式参数其实算是实参的一个影子,影子迟早会消失的🧐

👉🏻 写一个函数交换两个整型变量的值

错误版本

void swop(int x, int y)
{
	int res = x;
	x = y;
	y = res;

}
int main()
{
	int a, b;
	scanf("%d %d", &a, &b);
	printf("互换前 a=%d,b=%d\n", a, b);
	//创建互换函数
	swop(a,b);
	printf("互换后 a=%d,b=%d\n", a, b);
	return 0;
}

错误原因:问题出在实参和形参的地址不一样,在函数执行完后,x和y其实已经成功将a,b值交换了,但是在交接工作过程时,发现根本找不到a,b了,因为x,y算是新的独立的变量,在它获取内存的时候,也就是得到了属于它自己的地址,某种意义上来说,形参只是继承了实参的值,但是因为二者的地址不相同,所以实参和形参可以说是最熟悉的陌生人。而为了解决这个问题,我们就得从根本上去解决,那就是让它们的地址能有联系

在这里插入图片描述
将实参的变量改为取地址后,形参的变量改为指针变量(存放地址)时,这时x,y接受的就是a,b的地址了,而这时x,y做的任何改变都会与a,b同步,而这也就能实现我们变量交换的目的了🙂
在这里插入图片描述
在这里插入图片描述
而这种方法我们叫做传址调用,而纯粹的a,b和x,y则是传值调用,我们下面也会讲到。

👉🏻函数调用

传值调用:函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。
传址调用
1.把函数外部创建变量的内存地址传递到函数参数的一种调用函数的方式
2.这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操作函数外部的变量

👉🏻写一个函数,调用一次,就将n的值加1

void add(int* x)
{
	*x = *x + 1;//一定记得是用*x,而不是单纯x,因为*x才是指针(代表着地址),就像拿着身份证的人,它才能代表n
	//(*x)++;//写法二,加括号是因为++的优先级更高
}
int main()
{
	int n = 0;
	add(&n);//这边直接取地址,这样后面函数里面形参的改变就能同步改变n的值
	printf("%d\n", n);
	return 0;
}

今日好诗
《相思》
[唐] 王维
红豆生南国,春来发几枝?
愿君多采撷,此物最相思。

如上便是本期的所有内容了,如果喜欢并觉得有帮助的话,希望可以博个点赞+收藏+关注🌹🌹🌹❤️ 🧡 💛,学海无涯苦作舟,愿与君一起共勉成长
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值