C语言秃头笔记--函数2

上章我们了解的库函数,和个别库函数的使用,这一章我们了解自定义函数

 

自定义函数

自定义函数和库函数一样,有函数名,返回值类型和函数参数。

但是不一样的是这些都是我们自己来设计。这给程序员一个很大的发挥空间。

函数的组成:

ret_type fun_name(para1, * )

{

 statement;//语句项

}

ret_type 返回类型

fun_name 函数名

para1 函数参数

 

这里我们运用实例了解:

  写一个函数找出两个整数的最大值:

bbc5a5f3c6e34454999a83905b11832c.jpg

首先我们先给a,b赋值,然后在主函数调用自定义函数get_max并给予相应的值,

(自定义函数的名称可以随便叫啥,但最好可以让别人大概知道这个函数的作用) 

然后我们打印max,至于具体过程我们交给get_max完成

(上章讲过,函数具体执行过程我们不具体过问,只要给出正确结果就行)

当主函数编译完成后,我们再定义get_max。首先我们根据上面的语法格式定义函数,给予数据类型(int),函数名(get_max),函数参数(int x,int y)

(因为主函数传过来的是整型,所以我们定义时,也应该是整型)

之后我们定义 整型变量 z 并给初值,然后判断x 是否大于 y ,如果大于则 把 x 赋值给 z ,如果不大于则把 y 赋值给 z ,最后我们返回较大值 即,return z

 

之后我们再来看一个例子:

这里我们要求运用函数交换两个值的位置并打印,如:

4125c029a1ea45dfad385ea464961423.jpg

首先我们定义 整型变量 a,b 然后先打印交换前的值,然后再调用函数swap并给予相应的值

最后我们打印交换后的值

和上一题一样,首先我们根据自定义函数格式定义函数,然后定义一个 整型变量 z ,我们先把 x 的值给 z ,再把 y 的值给 x ,最后我们把  z 的值给 y 完成交换,因为这个函数不需要返回值,所以我们给函数名前面加 void ,

表示不返回任何值,也不需要返回

 

 然后我们运行程序,发现 a 和 b 并没有交换,如图,这是为什么呢?

6f144117e72e4ad7b55010cf20e39c46.jpg

 经过调试后我们发现, x  y   和 a  b 的地址不同,是两个毫无关系的空间,如图:

b2c759fcf22349a0a083478c48e832bd.jpg

 所以我们在函数中交换时,并没有影响到主函数中,a和b的值

但如果我们可以让函数拿到a和b的地址,是不是就能改变a和b呢?

这里我们运用之前有初步了解的指针知识,写出代码,如:

2403add3a85e45539e3cdc72d45b8c3d.jpg

f040811a4126404d9a61689e621f8cf7.jpg

 我们定义一个新的函数swap2,我们将 a 和 b 的地址给予 swap2 ,即( &a  ,&b )。

然后我们在函数中运用整型指针 pa 和 pb 接收,

(这时,我们在 pa 前面加 * 即可表示 a ,在pb前面加 * 即可表示 b )

然后我们定义变量 z ,重复我们第一次代码的过程进行交换,最后我们得到:

3c5576c8ad6b47a0aa45915436af066f.jpg

 a 和 b 的位置我们就交换成功了

 

函数的参数

之后我们回到之前那个问题,为什么我们第一次代码交换失败呢?

这里我们具体介绍一下,首先我们要先了解函数的参数的定义

实际参数(实参)

 真实传给函数的参数,叫实参。

实参可以是:常量、变量、表达式、函数等。

无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。

形式参数(形参)

形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效。

 

当我们了解过实参和形参的定义后,我们就能知道为什么我们第一次会交换失败

因为我们主函数中的 a b  是实参,而函数中的 x y 是形参,而形参有自己独立的空间并且在调用完毕后就销毁了,所以我们第一次交换失败了

 

所以我们可以简单的认为:形参实例化后相当于实参的一份临时拷贝

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值