1.函数调用
我们需要用到自定义的函数的时候,就得调用它,那么在调用的时候就称之为函数调用。
在C语言中,函数调用的一般形式为:
函数名([参数]);
[]中可以是常数,变量或其它构造类型数据及表达式,多个参数之间用逗号分隔。
2.有参与无参
在函数中不需要函数参数的称之为无参函数,在函数中需要函数参数的称之为有参函数。
有参和无参函数的一般形式如下:
3.形参与实参
函数的参数分为形参和实参两种。
-
形参
形参是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数。 -
形参特点:
形参只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。
形式参数有自己的内存空间,当函数被调用时才申请了该空间,才有了这个变量同时被赋值为实际参数的值。当函数执行结束后,该空间被内存管理单元自动回收。及释放空间 -
实参
实参是在调用时传递该函数的参数 -
实参特点
实参可以是常量、变量、表达式、函数等。
无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值等办法使实参获得确定值。
在参数传递时,实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配的错误。
4.函数的返回值
函数的返回值是指函数被调用之后,执行函数体中的程序段所取得的并返回给主调函数的值。
函数的返回值要注意以下几点:
- 函数的值只能通过return语句返回主调函数。
return 表达式 或者为: return (表达式);
- 函数值的类型和函数定义中函数的类型应保持一致。
ps: 如果两者不一致,则以函数返回类型为准,自动进行类型转换。 - 没有返回值的函数,返回类型为 void。
5.递归函数
递归就是一个函数在它的函数体内调用它自身。
执行递归函数将反复调用其自身,每调用一次就进入新的一层。
注意递归函数必须有结束条件
阶乘计算的应用:
#include <stdio.h>
#include <stdlib.h>
int digui(int num){
int result;
//越界判断!
if(num >= 17){
printf("越界,超出计算机计算位数\n");
exit(-1);
}
if(num == 0){
return 1;
}else{
return num*digui(num-1);
}
}
int main(int argc, char const *argv[])
{
int num;
int result;
printf("需要计算的阶乘:\n");
scanf("%d",&num);
result = digui(num);
printf("%d 的阶乘为 %d\n",num,result);
return 0;
}
递归图解: