为实现特定目的而编写的一段可被调用的代码
简单地讲:函数就是一组语句,取了个名字
别名:子例程(routine)/方法(Method,一般面向对象的语言使用这个叫法)
函数的组成部分
以主函数为例:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
return 0;
}
返回类型 | int |
---|---|
函数名 | main |
参数 | (int argc, char *argv[]) |
函数体 | { return 0; } |
函数三类
函数分三种:main函数、系统函数、自定义函数。
int main(int argc, char *argv[]) {// main:主函数
int ret = printf("震惊!
");// printf:系统函数
printf("打印字符数:%d",ret);// printf:系统函数
return 0;
}
#include <stdio.h>
// 自定义函数:先定义,再使用
int max( int num1, int num2 ) {
int nRet = (num1 > num2? num1:num2);
return nRet;
}
int main(int argc, char *argv[]){
int nMax = max( 2 , 3 );// max自定义函数
printf("%d", nMax);
}
自定义函数使用口诀:
- 先定义,再调用;
- 传参数,得结果。
函数的好处
- 复用性+(拒绝重复代码)
- 维护性+(便于修改,可以只改函数里的代码)
- 可读性+(便于理解,这需要给函数取个合适的名字,要求见名知意)
当同一段代码出现两次时,就该考虑把这段代码封装到一个函数中,以减少重复代码。
参数(parameter)
形参/形式参数(formal parameter /parameter)
定义函数时,函数名后面括号中带类型的变量——规定参数必须是什么类型。
实参/实际参数(actual parameter /argument)
调用函数时,实际传入的参数,必须和形参的类型匹配。
#include <stdio.h>
int max(int x, int y) {//函数定义:形式参数
int nRet = (num1 > num2? num1:num2);
return nRet;
}
int main(int argc, char** argv) {
int a = 100;
int y = 200;
int nMax = max(a, y);// 函数调用处:实际参数
printf("%d", nMax);
return 0;
}
形参和实参的名字可以不一样——
返回值
- 无返回值——方便
- 有返回值——严谨
函数可以没有返回值,这时参数类型为void
函数主体中可以加【return ;】(只返回而无值)
也可以不加(自然结束。)
void luck(int n) {
if (1 == n) {
printf("恭喜您,获得100元代金券,购物满3000可用");
return;// 直接返回
}
printf("很遗憾没中奖,再去消费1000元又能来抽奖了");
// 自然返回
}
返回值可以让调用方知道函数执行的结果有哪些问题,建议函数都加返回值,哪怕返回值没有用到。
int func(){…}
double func(){…}等
int max(int x, int y) {
return (x>y)?x:y;
}