C语言的函数定义是互相平行、独立的,也就是说,在定义函数时,一个函数内不能再定义另一个函数,即不能嵌套定义,但可以嵌套调用函数,即,在调用一个函数的过程中,又调用另一个函数。
如下图所示:表示的是两层嵌套(连main一共三层函数)。
其执行过程时:
①执行main函数的开头部分
②遇到函数调用语句,调用函数a,流程转去函数a
③执行a函数的开头部分
④遇到函数调用语句,调用函数b,流程转去函数b
⑤执行b函数,如果再无其他嵌套的函数,则完成b函数的全部操作
⑥返回到a函数中调用b函数的位置
⑦继续执行a函数中尚未执行的部分,直到a函数结束
⑧返回main函数中调用a函数的位置
⑨继续执行main函数中剩余部分直到结束
【例题】
输入4个整数,找出其中最大的数。用函数的嵌套调用来处理。
【思路】
定义函数Max4,用来实现找出4个数中的最大者这个功能。定义Max2函数,用来实现找出两个数中的大者。在main函数中调用Max4函数,然后在Max4中调用另一个函数Max2。在Max4中通过多次调用Max2函数,可以找出4个数中的大者,然后把它作为函数值返回main函数,在main函数中输出结果。
【代码实现】
int Max2(int x,int y)
{
return(x>y?x:y);
}
int Max4(int w,int x,int y,int z)//定义Max4函数
{
int Max2(int x,int y);//对Max2的函数声明
int m;
m=Max2(w,x);//调用Max2函数,得到w,x两个数中的大数放在m中
m=Max2(m,y);//调用Max2函数,得到w,x,y三个数中的大数放在m中
m=Max2(m,z);//调用Max2函数,得到w,x,y,z四个数中的大数放在m中
return m;//把m作为函数值带回main函数
}
int main()
{
int a,b,c,d;
printf("从键盘输入4个整数:\n");//提示输入4个数
scanf("%d%d%d%d",&a,&b,&c,&d);//输入4个数
int m;
m=Max4(a,b,c,d);//调用Max4函数,得到4个数中最大者
printf("4个数中最大的数为:%d",m);//输出4个数中最大者
return 0;
}
【结果】