十一、初阶C语言之函数(尽量高内聚低耦合)

函数是一段完成特定任务的代码块,可以被多次调用,接受输入参数并可选地返回一个值,一个大任务我们可以分为多个小任务,每个小任务可以由一个函数解决,这样可以提高代码的可读性、可维护性和可重用性。

函数的基本构成:返回类型、函数名、参数列表(不宜过多)、函数体。如果无返回则使用void(表示不返回任何值)。函数要少用全局变量。

在C语言中函数可以分为库函数和自定义函数。库函数是指在C语言标准库中预先定义好的函数,使用时需要相应的头文件即可调用。自定义函数是为了实现某一功能程序员自己定义的函数,设计时做到谁申请的资源就由谁来释放。

I、库函数

1、strcpy函数的用法

库函数strcpy(ch1,ch2)用于把字符串ch2的内容拷贝到字符串ch1中(包括’\0’),它的头文件为string.h

2、memset函数

库函数memset(arr + 6,’!’,2)是指把字符串arr6,6+2]个字符改变为!,它的头文件为string

II、自定义函数

要注意实参和形参,实参传递给形参时,形参是实参的一份临时拷贝,对形参的改变不影响实参。

交换两个数:

我们前面提到形参的改变不影响实参,因此不能通过修改形参来改变实参,那么用什么方式可以直接改变实参呢?

这时我们想到了指针,依据指针是地址的特性,我们传指针给函数,然后在函数内解指针,就能链接到函数外部的数据了,然后我们就可以实现两个数的交换了。当要修改实参时要用指针,当不需要改变实参时,则直接传值即可。

判断素数(只能被1和它本身整除的数):

函数的输出要用到return x;语句,函数的输出只要执行了一次return x;,后面就不再执行直接返回第一次执行的返回值。

上述代码中sqrt()是用于开平方的函数输入double类型的数据,返回double类型的数据,头文件为math.h。

判断闰年(1、能被400整除 或(||) 2、能被4整除不能被100整除):

判断闰年简化版:

传址实现+1:

上述代码中对解指针要加(),不然会报错

III、函数的调用

1、传值调用

传进函数的仅仅是一个值,改变形参不影响实参。

上述代码中实参和形参分别占不同的地址块

二分查找法:

数组传参传的是地址,也就是说在上述代码中y[]实际上是一个指针变量而非整个数组,故用sizeof(y)的结果为4或8。因此不能直接在函数中求数组的大小,要在外部求完之后传进去(szs)。当然在函数中以正常访问数组的方式访问是没有问题的。

布尔类型变量(bool s = true;):该变量有true(真)和false(假)两种值。

2、传址调用

通过传递一个指针到函数中,使得函数与外部建立起真正的联系,可以修改实参的值。例子如上。

传递指针即传递地址,解地址后就能找到相应的实参。

IV、函数的嵌套调用和链式访问

1、嵌套调用

函数可以嵌套调用,但是不能嵌套定义(函数地位平等)。

2、链式访问

链式访问就是上一个函数的返回值作为下一个函数的输入值。

上述代码中就是链式访问的体现,就好比工厂加工上游工厂加工的产品则是下游工厂的原材料。printf()函数的返回值是要打印目标的个数。

在函数定义时有返回值的一定要写上类型,无返回值的则要写上void。当没有参数时也不要传参数了,一定要规范起来。

VI、函数的声明和定义

定义就是定义一个函数,实现一定功能。声明就是说明有这么一个函数存在。

要先声明后使用时

我们常常将函数的声明放在一个头文件中

上述代码中我们将函数的声明放到了Add.h中,将函数的定义放到了Add.c中。我们在text.c中使用的时候只要包含头文件就可以像库函数那样使用了,只不过和库函数不同的是用””引用,而非<>。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值