为什么需要函数?
- 避免重复性操作
- 有利于程序的模块化
- 函数是C语言的基本单位
什么叫做函数?
逻辑上: 能够完成特定功能的独立的代码块
物理上:
- 能够接收数据(也可以不接收)
- 能够对接收的数据进行处理
- 能够将数据处理的结果返回(可以不返回)
总结: 函数是个工具,他是为了解决大量类似问题而设计的,函数可以当作一个黑匣子
如何定义函数?
函数的返回值类型 函数名字(函数的形参列表){
函数执行体
}
例如:求两个数的和
int sum(int a,int b){
return a+b;
}
- 函数定义的本质是详细描述函数之所以能够实现某个特定功能的具体方法
- return表达式的含义:终止被调函数,向主调函数返回表达式的值,如果表达式为空,则只终止函数,不像主调函数返回任何值
- 函数返回值类型也称为函数的类型,因为如果函数名前的返回值类型和函数执行体中return表达式类型不同的话,则最终函数的返回值类型以函数名前的返回值为准
函数的声明
函数声明是干什么用的?
1.告诉编译器即将可能出现的若干个字母代表的是一个函数。
2.告诉编译器即将可能出现的若干个字母所代表的函数的形参和返回值具体情况
3.函数声明是一个语句,末尾必须加分号
4.对库函数的声明是通过请求头(#include<库函数所在的文件.h>)实现的
当函数写在主函数上面的时候声明可以省略,如下:
#include<stdio.h>
//这条语句可加可不加:int sum(int a,int b);
int sum(int a,int b){
return a + b;
}
int main(void){
int a = 3;
int b = 4;
int s = sum (a, b);
printf("%d",s);
return 0;
}
通常为了便于观察,需要将函数的定义写在主函数下,这时候必须先声明在定义:
声明函数的语法:函数的返回值类型 函数名字(函数的形参列表);
#include<stdio.h>
int sum(int a,int b);
int main(void){
int a = 3;
int b = 4;
int s = sum (a, b);
printf("%d",s);
return 0;
}
int sum(int a,int b){
return a + b;
}
形参和实参
形参: 是在定义函bai数名和函数体的时候使用的参数,目的是用来接收调用该函数时传递的参数。
实参: 可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。
- 个数要相同
- 位置一一对应
- 数据类型必须相互兼容
函数分类
- 有参函数和无参函数
- 有返回值和无返回值
- 库函数和用户自己定义的函数
- 值传递函数和地址传递(指针)
- 普通函数和主函数(main):一个程序有且只有一个主函数,主函数是程序的入口,也是程序的出口,主函数可以调用普通函数,普通函数不能调用主函数,普通函数可以互相调用
注意事项及系统函数
注意事项
- 如果函数调用写在函数定义的前面,则必须加函数声明
- 函数在设计的时候尽量使其功能独立单一,以增加代码的复用性
变量
- 按照作用域可以将变量分为全局变量和局部变量
- 按照存储方式可以将变量分为静态变量,自动变量和寄存器变量
- 在函数内部定义的和形参都属于局部变量,只能在本函数内部使用
- 在所有函数外部定义的叫全局变量,全局变量的下面都可以使用
- 一定要注意变量要先定义后使用
- 当全局变量和局部变量名一样时,局部变量会把全局变量屏蔽
系统函数
求平方根: double sqrt(double x);
求绝对值: int abs(int x);
C语言中还有很多系统函数如果有需要请自行查阅。