1 函数介绍
函数:function
一段独立的具有一定功能的程序段
函数作用:使代码模块化,可以重复调用
控制程序的异常范围
函数三要素:
功能:函数的作用
参数:函数的接口
返回值:函数的结果或状态
abs(int) 整型数绝对值
fabs(double) 浮点型数绝对值
2 函数分类
1.系统函数
系统库函数--操作系统提供的函数,使用man 3手册
Open read write close
系统调用函数---内核提供的函数 使用man 2手册
Fopen fread fwrite fclose scanf printf
2.自定义函数
学习函数的重点;功能,参数,返回值
3 函数定义格式
存储类型 数据类型 函数名(数据类型 变量名。。。)
(
函数体;
)
存储类型:
1.省略不写
2.static 静态函数
3.外部函数
数据类型
基本数据类型:char ---double
构造数据类型:不能是数组,可以是结构体,联合体
特殊数据类型
任意类型的指针
函数名:见名知意
1.遵循c语言命名规范
2.行业习惯
3.公司规范
形参
()形参可以没有,写void或不写 int getchar(void)
形式参数可以有一个,可以有多个
Int abs(int num)
多个形参用逗号隔开int main(int argc,const char *argv【】)
形参--本质上是定义一个局部变量
{}花括号不能省略,return语句在普通函数中为结束函数,在 main函数中为程序结束
当函数返回值为void类型时,return语句可以不写或return;
当函数返回值为其他数据类型时,return值的数据类型必须与函数数据类型一致。
return结果值必须与函数的数据类型保持一致。
4 函数调用:
1.函数无返回值时
函数名(实参);
2.函数有返回值时:
函数名(实参);
printf(“asdaf”)
返回值=函数名(实参);
Ch=getchar();
形参:形式参数,函数定义时使用,定义一个变量,没有具体的值
实参:实际参数,函数调用时使用,具有实际意义的值,可以是一个变量名,具体的值,表达式
实参的数据类型必须和形参保持一致。
数组在传参时大小不用赋值,会退化为指针
函数传参--作用:形参将实参的值进行拷贝
5 函数的声明
--implicit declaration of function 报错warnning 函数未声明,解决方案
1.将函数定义在调用之前
2.将函数进行声明
函数的声明格式
存储类型 数据类型 函数名(数据类型 变量名…);
函数声明时变量名可以不写,但是数据类型不能省略,数据为 int/char *;
函数参数
考虑函数的性行参如何设计
函数的行参是将实参的值进行拷贝,形参和实参是独立的存储
函数传参传值
函数的返回值可以带出函数结果,当结果与状态冲突时,用指针带出表示结果,返回值为状态。
6 其他
提交API接口
.so文件 动态库
.a文件 静态库
工程里.c文件是函数定义,.h文件是函数声明
双引号括起来的头文件一般是自己写的,尖括号是系统库的
.h文件里,公共头文件,构造数据类型,函数声明
返回值为指针的函数为指针函数,
指向函数的指针成为函数指针,函数指针的用法
1.调用函数
2.回调函数---函数指针做形参
7 总结:
1.当需要把函数外值传到函数内部时,传值,传地址都行;
2.如果需要把函数内部的值带出到函数外部,需要传地址,并且使用*操作地址,操作外部值;
或者定义静态变量
3.当不需要传入到函数内部,也不带出去,不传参数;
4.函数没有返回值时,返回是垃圾值