、
1.优点
- 可以省去编写重复代码的苦闷
- 可以让程序模块化,提高代码可读性
- 方便后期修改完善
- 隐藏了实现的细节
2.分类
有参无参
3.定义形式
返回类型 函数名(合法的标识符)(【参数列表】(需要的数据))
{
//代码块
return 返回值
}
注意:return返回值类型要和返回类型一致
4.参数概念
形参:函数定义时参数列表中的叫做形参,形参可以接受实参传过来的值
实参:函数调用时参数列表中的叫做实参,实参会赋值给形参,让函数内部操作
注:
函数传参的过程只是单纯的值拷贝
所以在函数内部改变形参的值,不会影响实参
实参和形参的存储地址不同
5.函数声明
函数写在调用之后,需要提前声明
6.多文件设计
头文件放函数声明.h
源文件放函数定义.c
7.函数与数组
- 当我们把数组传到函数中的时候,数组会隐式转换为地址(指针),类似于一个整数
×86 32位 指针是4个字节
×64 64位 指针是8个字节
- 二维数组 -> 固定到列,不能省略
8.变量的作用域与声明的周期
1.作用域
全局变量:定义在函数之外的变量,自动初始化为0(编译器自动回收内存)
全局变量生命周期:会随着程序结束而结束,程序不结束,全局变量的内存就一直存在
局部变量:(编译器自动回收内存),作用域结束,声明周期也就结束了
2.生命周期
自动变量(auto):超出作用域内存自动释放
静态自动变量:超出作用域不会自动释放 -> 程序结束释放(程序一运行就已经定义好了,不需要等到定义函数)
注:static
- 静态变量不允许函数赋值,只能赋值常量(
static int a=getnumber()
× ) - 作用域没变,但是生命周期变长了
3.寄存器变量
优点:存取速度特别快
- 如果没有对变量取地址,那么编译器会自动把变量放到寄存器里面
register
关键字只是建议编译器将变量放到寄存器中,并不一定采纳- 全局变量不能声明为寄存器变量
4.函数的递归
- 递归必须要有结束条件,否则会爆栈
- 递归的调用过程:自己调用自己,展开
5.ertern,static
- 不能直接访问别的文件中的全局变量
- 可以先声明使用外部变量
extern int g_cnt; 注:加上static,别的文件就不可以使用了-> 限制作用域
版权声明:本文为CSDN博主「热爱编程的小K」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_72157449/article/details/128357138