C语言提供了大量的库函数, 比如<stdio.h>, 但是有时候我们的一些逻辑需要自己定义函数
定义函数的一般形式:
函数的返回值 函数的名字( 函数的形式参数(形参) )
{
函数的执行体
}
为什么需要函数
- 避免重复性操作
- 有利于程序的模块化
什么叫函数
- 能够完成特定功能的独立代码块
- 能够接收数据 [当然也可以不接收数据]
- 能够对接受的数据进行处理
return表达式
终止函数
void i()
{
return; /* 终止函数 */
}
向主调函数返回表达式的值
int i()
{
return 10; /* 第一: 终止函数 第二: 向主调函数返回10 */
}
注意: break是用来终止循环和switch的, return是用来终止函数的!
int i()
{
return 10.5; // error 因为函数的返回值是int不是float或double
}
函数的分类
有参函数 和 无参函数
有返回值函数 和 无返回值函数
库函数 和 用户自定义函数
普通函数 和 主函数 (main)
注意: 一个程序必须且只能有一个主函数
主函数可以调用普通函数 普通函数不能调用主函数
普通函数可以互相调用
主函数是程序的入口, 也是程序的出口
如果函数在main函数后面调用, 就需要前置声明
例如
int f();
int main()
{
f();
return 0;
}
int f()
{
printf("%s\n", "Hello world");
return 0;
}
函数的前置声明要有一个结束符, 不过声明函数的时候不用结束符
前置声明
告诉编译器即将可能出现的若干个字母代表的是一个函数
告诉编译器即将可能出现的若干个字母所代表的函数的形参和返回值的具体情况
函数声明是一个语句, 末尾必须加分号
对库函数的声明是通过 # include <库函数所在的文件的名字.h> 来实现形参和实参的。
形参和实参
个数相同
位置一一对应
数据类型必须相互兼容
void f(int i, int j)
{
int k;
k = i + j;
printf("%d + %d = %d\n", i, j, k);
}
int main()
{
int i, j; /* 这个i, j和函数形参的i, j是不一样的, 所以不会冲突 */
scanf("%d %d", &i, &j);
f(i, j);
return 0;
}
函数是C语言的基本单位!
一个函数尽量独立, 单一!