C语言的函数定义是互相平行的,独立的,也就是说,在定义函数时,一个函数内不能包含另一个函数,不能嵌套定义函数(但Pascal语言是可以嵌套定义的)。但能嵌套调用。
创新互联公司成立与2013年,先为鼎城等服务建站,鼎城等地企业,进行企业商务咨询服务。为鼎城企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
在C语言中,所有的函数定义,包括主函数main在内,都是平行的。也就是说,在一个函数的函数体内, 不能再定义另一个函数, 即不能嵌套定义.
在例子中,没有嵌套定义的.
int max(int a,int b)
{
if(ab)return a;
else return b;
}//这是在定义max
而main()函数中,
void main()
{
int max(int a,int b);//这是声明,被调用函数,定义在main函数前,可以省略.
int x,y,z;
printf("input two numbers:\n");
scanf("%d%d",x,y);
z=max(x,y);//这是调用.
printf("maxmum=%d",z);
}
所以不矛盾..
这句话是不对的。
嵌套是两种结构间的关系,而不是函数间的关系。递归是一个函数调用自身,可以看作是一个函数调用另一个函数中的较特别的例子。
函数嵌套与递归调用的区别函数嵌套是语言特性,递归调用是逻辑思想。
扩展资料:
函数嵌套函数嵌套允许在一个函数中调用另外一个函数。
递归调用而递归是一种解决方案,一种思想,将一个大工作分为逐渐减小的小工作。递归是一种思想,只不过在程序中,就是依靠函数嵌套这个特性来实现了。递归最明显的特点就是,自己调用自己。
函数嵌套就是函数调用函数,是普遍的,递归就是函数调用自身,使函数嵌套的一个特例。嵌套调用就是某个函数调用另外一个函数,递归调用是一个函数直接或间接的调用自己。
不可以嵌套定义,每一个函数都有一个内存地址,这个地址是函数的入口,它是不可以在其他函数中定义的。
但是函数可以嵌套调用,也就是在函数A中可以调用函数B
目前
函数
没有嵌套情况。
嵌套是函数A里面使用了函数B,则函数A
嵌套函数
B,函数B还可以嵌套函数C,函数C还可以嵌套函数D,根据不同的平台嵌套可以使用的
级数
不同。建议不要超过8级,因为运行
过程
中要出现调用函数,存在保留现场,
恢复现场
的
堆栈
操作,嵌套到一定级数,
错误
发生的概率
指数级
增加。
#include
"stdio.h"
int
main()
{
char
ch,ad;
printf("现在正在下雨吗?(y/n)\n");
ch=getchar();
if(ch=='y'||ch=='Y'||ch=='n'||ch=='N')
{
if(ch=='y'||ch=='Y')
printf("现在正在下雨。\n");
if(ch=='n'||ch=='N')
{
printf("现在没有下雨。\n");
printf("今天会有太阳吗?(y/n)\n");
ad=getchar();
if(ad=='y'||ad=='Y'||ad=='n'||ad=='N')
{if(ad=='y'||ad=='Y')
printf("今天是晴天。\n");
if(ad=='n'||ad=='N')
printf("今天是阴天。\n");
}
else
printf("第二次输入答案不在选择范围内。\n");
}
}
else
printf("第一次输入答案不在选择范围内。\n");
}
先看
fun(a+
)
里面
fun(d)
d是全局变量
值为1
再看fun(1)
把1传给fun的形参p
进入fun
p
为1
fun内有
局部静态变量d
初值为5
d+=p
使之
变为6
输出d
(局部变量,全局变量名也是b被屏蔽,因此这个d是fun内的局部变量d)
所以输出6
return
返回6
fun(1)返回6
fun(a+6)
a是3
3+6的值9
传给fun的形参p
这是第二次调用fun函数
p为
9
由于d是
静态局部变量
故再次调用fun函数
其中为上一次调用保留的值6
d+=p
使之
变为15
fun函数内
输出
静态局部变量d的值15
fun(9)返回15
返回的15给main函数的printf输出
有输出15
所以是
61515