1.C语言中函数的定义
在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method, subprogram, callable unit),是一个大型程序中的某部分代码, 由一个或多个语句块组 成。它负责完成某项特定任务,而且相较于其他代 码,具备相对的独立性。 一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。
函数被分类成库函数和自定义函数
2.库函数
在C语言初期并没有库函数,但是在开发实际中有一些函数被频繁使用,为了书写的简便性和正确率,程序员设置了一些特定函数来发挥特定作用例如函数time,strcmp,rand, srand.......
库函数在使用的时候要使用相应的头文件
我们可以使用以下工具学习使用库函数
MSDN(Microsoft Developer Network)
www.cplusplus.com
http://en.cppreference.com(英文版)——---------C语言官网
http://zh.cppreference.com(中文版)
3.自定义函数
自定义函数顾名思义由程序员自己编写函数,同样包含返回类型,函数名,函数参数和最重要的函数体,函数在一定程度上简便了代码的书写,最重要的是函数单一化作用极大的提高可操作性,同时可以使代码更加复杂化和多元化。
函数参数分为实际参数(实参)和形式参数(形参)。实际参数就是传给函数的参数,有常量,变量,表达式,函数等,但是无论是什么形式,实参必须是一个确定的值;形参就是函数参数,在函数调用时,才分配内存,在函数结束时销毁,最重要的一点是函数调用时,形参是实参的临时拷贝,对于形参的改变不影响实参。如图1
函数调用有两种形式,一种是传值调用,另一种是传址调用。传值调用实参传给形参的是值,传址调用实参传给形参的是地址,使用指针接收。如图2
下面介绍一下交换数值的代码怎么写
图2
图2
说一下我的个人理解:我们把内存想象成一个酒店,地址想象成门牌号,数值相当与居住在房间中的你;图一中传值调用先当与复制了一个一模一样的你在另一个房间,改变你的复制品改变和你没有关系;图二中传址调用是通过地址(也就是指针)找到你,从而实现改变你的目的。
我们可以简单的理解是:形参实例化之后其实相当于实参的一份临时拷贝。
此外,函数的返回值有没有的区别是,返回值要返回到函数上,无返回是只是不输出数值,仍旧需要执行主函数内的代码。
函数具体使用传址还是传值就看你是否想要改变实际参数。
4.练习
(1)写一个函数可以判断一个数(100-200)是不是素数。
未使用函数
函数
优化后
库函数sqrt()是开根号,得到数据类型是double,头文件是math.h。
(2)写一个函数判断一年(1000-2000)是不是闰年。
非函数
函数
(3)写一个函数,实现一个整形有序数组的二分查找。
三个if语句和if , else if, else 二者有一定区别,如果三个if语句轮流判断,后者只要有一个通过后面就不执行了。
此外,数组作为实参拷贝给形参时,为了节省空间,只拷贝数组第一个地址,实际上拷贝的是一个指针。