什么是函数
函数(function)是完成特定任务的独立程序代码单元。语法规则定义了函数的结构和使用方式。如printf()、scanf()、getchar()、putchar()和 strlen()。
函数作用
int calculate(int x, int y); int main(void) { int a, b, result;
printf("请输入两个数进行相加:\n");
scanf("%d%d", &a, &b);
result = calculate(a, b);
printf("%d", result);
return 0;
system("pause");
}
int calculate(int x, int y) { int ret; ret = x + y; return ret; } ```
- 形式参数
上面主函数calculate()中的 int x 和 int y 就是形式参数简称“形参”。
- 形参也是局部变量,属该函数私有。这意味着在其他函数中使用同名变量不会引起名称冲突,每次调用函数,就会给这些变量赋值。
- 形参的定义必须加上数据类型
- 实际参数
上面主函数main()中的a,b为实际参数简称“实参”,是用户实实在在输入的值
- 区别
实际参数是出现在函数调用圆括号中的表达式。形式参数是函数定义的函数头中声明的变量。调用函数时,创建了声明为形式参数的变量并初始化为实际参数的求值结果。
由于“形参”和“实参”都是概念,而在实际中,实参只是把值传给了形参,而非变量也被传入并参与计算。
函数调用参数
如上例所示11行代码,实际参数可以是常量、变量,或甚至是更复杂的表达式。无论实际参数是何种形式都要被求值,然后该值被拷贝给被调函数相应的形式参数。
两种调用方式:
传值调用: 该方法把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数不会影响实际参数。
- 引用调用: 通过指针传递方式,形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。
默认情况下,C 使用传值调用来传递参数。一般来说,这意味着函数内的代码不能改变用于调用函数的实际参数。
函数返回值
- 在上述示例中 return ret 即把calculate()函数中的运算结果返回给调用者
- 当程序执行到return语句时会立即停止,所以return后的语句不会在执行。
返回值不一定是变量的值,也可以是任意表达式的值,如:
return x+y;
易错知识点
int main () 和 int main (void)区别
前者表示告诉编译器函数中有参数,但是是未知个数。
后者即没有参数。calculate(a, b)和calculate((a, b))区别
前者表示为函数中有两个参数,其中逗号为连接符。
后者为一个参数,逗号表示为运算符。函数能否嵌套定义函数
return 0的含义
在普通的函数中return 0 即返回给函数调用者一个 int类型的值为0,而在main函数中return 0返回给操作系统一种状态,操作系统可以根据这个返回值判断你的程序执行状态。
测试示例:Windows CMD/PowerShell:
if error level 1
…(非0为真)- Linux Bash:
echo $?
- Csh:
echo $status