函数的概念
1.函数及作用
- 将原来在main中的代码换一个位置,存放在另一个地方
- 为了减少重复的代码块,有了利于阅读
- 代码的模块清晰,存代码块的地方就是函数
1 | //函数的定义 |
- 理论上函数可以任意起名字,但是最好见明之意思
- 形参不能赋值
- 在定义函数的时候必须是类型+变量的形式,如果不写类型可能默认是int
- return的返回值 要与函数定义的相匹配
1 |
|
函数的定义不能定义在函数的代码块,必须在函数的外面
函数加()代表这是一个函数,如果返回值没有需要写void,而参数则可以写空格
{}里面是函数体,所有的代码必须放在{}中
函数调用:函数名+();
有参数无返回值的调用
1 |
|
- 函数定义时()里面的参数叫形参,因为形参只是形式上的参数,定义函数时没有开辟空间
- 形参只有在被调用的时候才会分配空间
- 形参的定义 类型名 + 变量名
- 函数调用有参函数时候,不可以没有参数
- 调用函数时候()中的参数叫做实参
- 实参的类型和形参数的类型,个数 必须一致
- 实参数可以为变量 也可以为表达式 只要类型相同就可以
有参有返回值
1 |
|
- 调用有返回值的函数时,可以接也可以不接
- 注意:因为返回的类型是int ,所以接受返回值的变量也是int(相同)
- 参数 的传递只能是单向,实参->形参
- 返回值小于4字节,存在寄存器中
- 如果大于4字节,放在内存中
- 在传递的过程中本质上来说是传递值
实参转递
1 |
|
- 实参传给形参,形参的值不会改变实参的值
- 如果参数是传变量,只会是值传递
函数的声名
1 |
|
- 声明:把函数的定义形式放在调用之前,声明不许要写函数体,需要加分号,也可以放在函数体中
- extern:用来声明,不加也可以
- 在声名中不写变量名也可以,只需要指定参数类型即可
- 作用:告诉编译器,这个函数在其他地方定义
- 区别:定义有函数体没分号,声明没有函数体
return和exit的区别
- return :结束当前的函数
- 如果return在子函数中调用,只会结束子函数,如果return在main函数中会结束整个程序
- exit: 是一个库函数,用来结束整个程序,不管exit在哪里调用都会结束程序:exit (0);
分文件
1 | //main.c |
1 | //my.c |
1 | //my.h |
- 需要注意的一点是防止头文件重复包含
- 头文件中,只声名,不定义
- 定义只在.c文件中
防止头文件重复包含
1 | //my.h |
- 宏的名字最好和文件名相同,大写
- 在vs中我们也可以使用#prama once