引言
大家一定在数学中早就接触过函数,那c语言中的函数是什么样的呢,今天我想来讲讲。
我觉得c语言里面的函数和数学里面的函数本质上是一样的,都是给参数然后输出参数。
分类
c语言里面的函数分为库函数和自定义函数。库函数就是存在于标准库里面的函数,这个标准库是c语言自带的。而自定义函数就是我们自己定义的。
语法
函数在使用前都得先“通知一声”,即先得进行声明。库函数在使用前都得包含对应的头文件,比如说用printf得先包含stdio.h,用strlen得先包含string.h等等。而自定义函数同样要在调用这个函数前声明。那么自定义函数是如何定义的呢?返回值类型+函数名(形参)。调用函数:函数值类型+函数名(实参)。 (我突然发现只需要在主函数中首先定义参数的类型就把不需要在第哦啊用函数或者是定义函数的时候声明函数类型了)要明确三点1.形参与实参在内存中存储的地址不一样。2.不调用函数时形参不占用内存。3.形参是实参的临时拷贝。这三点以我目前的水品来看,我觉得知道就行了。下面是具体的例子。
这串代码是实现了一个加法函数的定义和调用。
return语句
1.return后接数值/表达式/不接(当return的返回值类型为void时)
2.return执行后此函数程序彻底中断
3.return的返回值类型和函数的类型不一样时,自动转变成函数的返回类型
4.如果有if语句,则要保证每种情况都有返回值返回,否则会报错
5.函数返回类型不写,则默认为int类型
6.有函数的返回类型无return,则返回值未知。
数组的传递
这里数组的传递需要注意在调用函数的时候可以用数组名作为实参,而定义函数的时候不可以,需要将数组类型名字写全【】也不能漏。形参的数组格式和普通数组格式是一样的。形参数组和实参数组是同一个数组即使他们的名字不一样。
嵌套调用和链式访问
顾名思义,嵌套调用就是一个函数嵌套着另一个函数,链式访问就是一个函数的返回值作了另一个函数的参数。下面给出一个例子方便理解。
这窜代码实现了对某年某月天数的判断,先是判断是否为闰年,在判断是否为二月,这里有个小技巧在月份天数的数组中首先写个0,这样就可以实现
多个文件
c语言中存在着.c和.h两种类型的文件。当我们遇到工作量较大的代码时会将代码主体和一些变量的定义,函数的定义分开,将头文件和函数的声明可以放在.h类型的文件中。下面给出一个例子方便理解。
这里将这窜代码分解到了各个文件中,不管在哪个文件中函数的调用首先都得进行声明,在声明自定义的头文件的时候要用" "符号。
static和extern
static和extern都是c语言中的关键字。static的意思是是静态的。static可以修饰函数,变量。extern用来掉调用外部的符号。下面来结合具体的例子进行讲解。
static修饰函数
这里我在函数的声明前加了static 。
发现即使使用extern去调用这个函数 ,也会报错所以一旦使用static修饰,那么此函数就只能在本文件中使用了
static修饰局部变量
我们发现使用static后输出的i值是有叠加效果的,这是因为在没有使用static前i在进行一次循环后就销毁了,等下次进入循环i会再次创建和初始化。而使用static后i在进行一次循环后是不会销毁的从而实现累加的效果。就改变了i这个变量的生命周期(即从变量创建到销毁所经历的过程)。
这就是全部的内容,还有很多不足的地方,我会继续学习,下一期发扫雷游戏。