C语言的程序都是由无数个小的函数组成的。C语言中的函数就是一个完成某项特定的任务的一小段代码。为什么要使用函数,使用函数可以省去编写重复的代码。如果程序要多次完成某项任务,那么只需编写一个合适的函数,就可以在需要时使用这个函数,或者在不同的程序中使用该函数,函数让程序更加模块化,从而提高了程序代码的可读性,更方便后期修改完善。
在C语言中我们一般会见到两类函数:库函数和自定义函数。
自定义函数的语法形式:
ret_type fun_name(形式参数)
{
}
ret_type 是函数返回类型 fun_name是函数名,括号中放的是形式参数。{}括起来的是函数体,函数的参数,如果有,要交代清楚参数的类型和名字,以及参数个数。函数的返回类型如果没写的话,编译器认为返回的是int类型的值。
在函数使用发过程中,把函数的参数分为:实参和形参。实参指的是在调用函数的时候,真实传递给函数的参数。在函数定义部分,函数后边的参数叫形式参数,简称形参。形参是实参的一份临时拷贝。
return 语句
1 return 语句后边可以是一个数值,也可以是一个表达式,如果是表达式则先执行表达式,再返回表达式的结果。
2 return 后边也可以什么都没有,直接写return;这种写法适合函数返回类型是void的情况。
3 return 返回的值和函数返回类型不一致,系统会自动将返回的值隐式转换为函数的返回类型。
4 return 语句执行后,函数就彻底返回,后边的代码不再执行。
5 如果函数中存在if等分支的语句,则要保证每种情况下都有return返回,否则会出现编译错误。f
6 如果函数要求返回值,但是函数中没有使用return返回值,那具体返回什么就不确定了。
数组做函数参数
在使用函数解决问题的时候,难免会将数组作为参数传递给函数,在函数内部对数组进行操作。例如set_arr(arr,sz), 这里set_arr函数要能够对数组内容进行设置,就得把数组作为参数传递给函数,同时函数内部在设置数组每个元素的时候,也得遍历数组,需要知道数组的元素个数。所以我们需要给set_arr传递两个参数,一个是数组名,另外一个是数组的元素个数。
数组传参的几个重点知识:
1.函数的形式参数要和函数的实参个数匹配。2数组在传参的时候,实参就写数组名,形参就是数组的形式。3实参和形参的名字可以一样,也可以不一样。4函数设计的时候,尽量功能单一。5数组在传参的时候,形参的数组和实参的数组是同一个数组。6形参如果是一维数组,数组大小可以省略不写。7形参如果是二维数组,行可以省略,列不可以省略。7数组传参,形参是不会创建新的数组的。
嵌套调用和链式访问
嵌套调用就是函数之间的相互调用。链式访问就是将一个函数的返回值作为另一个函数的参数,像链条一样将函数串起来就是函数的链式访问。函数或者变量要满足,先声明后使用;在函数声明中,形参的名字可以省略。函数的定义是一种特殊的声明。
代码比较多的时候,不会将所有的代码都放在一个文件中,往往会根据程序的功能,将代码拆分在多个文件中。一般情况下,函数的声明、类型放在头文件,函数的实现放在源文件。
static和extern
static和extern都是C语言中的关键字。static是静态的意思,可以用来:修饰局部变量,修饰全局变量,修饰函数。extern是用来声明外部符号的。作用域是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效的,而限定这个名字的可用性的代码范围就是这个名字的作用域。1局部变量的作用域是变量所在的局部范围。2 全局变量的作用域是整个工程。生命周期指的是变量的创建(申请内存)到变量的销毁(收回内存)之间的一个时间段。局部变量的生命周期是:进入作用域变量创建,生命周期开始,出作用域生命周期结束。全局变量的生命周期是:整个程序的生命周期。
.