C語言的函數(shù)定義是互相平行的,獨(dú)立的,也就是說,在定義函數(shù)時(shí),一個(gè)函數(shù)內(nèi)不能包含另一個(gè)函數(shù),不能嵌套定義函數(shù)(但Pascal語言是可以嵌套定義的)。但能嵌套調(diào)用。
創(chuàng)新互聯(lián)公司成立與2013年,先為鼎城等服務(wù)建站,鼎城等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為鼎城企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
在C語言中,所有的函數(shù)定義,包括主函數(shù)main在內(nèi),都是平行的。也就是說,在一個(gè)函數(shù)的函數(shù)體內(nèi), 不能再定義另一個(gè)函數(shù), 即不能嵌套定義.
在例子中,沒有嵌套定義的.
int max(int a,int b)
{
if(ab)return a;
else return b;
}//這是在定義max
而main()函數(shù)中,
void main()
{
int max(int a,int b);//這是聲明,被調(diào)用函數(shù),定義在main函數(shù)前,可以省略.
int x,y,z;
printf("input two numbers:\n");
scanf("%d%d",x,y);
z=max(x,y);//這是調(diào)用.
printf("maxmum=%d",z);
}
所以不矛盾..
這句話是不對(duì)的。
嵌套是兩種結(jié)構(gòu)間的關(guān)系,而不是函數(shù)間的關(guān)系。遞歸是一個(gè)函數(shù)調(diào)用自身,可以看作是一個(gè)函數(shù)調(diào)用另一個(gè)函數(shù)中的較特別的例子。
函數(shù)嵌套與遞歸調(diào)用的區(qū)別函數(shù)嵌套是語言特性,遞歸調(diào)用是邏輯思想。
擴(kuò)展資料:
函數(shù)嵌套函數(shù)嵌套允許在一個(gè)函數(shù)中調(diào)用另外一個(gè)函數(shù)。
遞歸調(diào)用而遞歸是一種解決方案,一種思想,將一個(gè)大工作分為逐漸減小的小工作。遞歸是一種思想,只不過在程序中,就是依靠函數(shù)嵌套這個(gè)特性來實(shí)現(xiàn)了。遞歸最明顯的特點(diǎn)就是,自己調(diào)用自己。
函數(shù)嵌套就是函數(shù)調(diào)用函數(shù),是普遍的,遞歸就是函數(shù)調(diào)用自身,使函數(shù)嵌套的一個(gè)特例。嵌套調(diào)用就是某個(gè)函數(shù)調(diào)用另外一個(gè)函數(shù),遞歸調(diào)用是一個(gè)函數(shù)直接或間接的調(diào)用自己。
不可以嵌套定義,每一個(gè)函數(shù)都有一個(gè)內(nèi)存地址,這個(gè)地址是函數(shù)的入口,它是不可以在其他函數(shù)中定義的。
但是函數(shù)可以嵌套調(diào)用,也就是在函數(shù)A中可以調(diào)用函數(shù)B
目前
函數(shù)
沒有嵌套情況。
嵌套是函數(shù)A里面使用了函數(shù)B,則函數(shù)A
嵌套函數(shù)
B,函數(shù)B還可以嵌套函數(shù)C,函數(shù)C還可以嵌套函數(shù)D,根據(jù)不同的平臺(tái)嵌套可以使用的
級(jí)數(shù)
不同。建議不要超過8級(jí),因?yàn)檫\(yùn)行
過程
中要出現(xiàn)調(diào)用函數(shù),存在保留現(xiàn)場,
恢復(fù)現(xiàn)場
的
堆棧
操作,嵌套到一定級(jí)數(shù),
錯(cuò)誤
發(fā)生的概率
指數(shù)級(jí)
增加。
#include
"stdio.h"
int
main()
{
char
ch,ad;
printf("現(xiàn)在正在下雨嗎?(y/n)\n");
ch=getchar();
if(ch=='y'||ch=='Y'||ch=='n'||ch=='N')
{
if(ch=='y'||ch=='Y')
printf("現(xiàn)在正在下雨。\n");
if(ch=='n'||ch=='N')
{
printf("現(xiàn)在沒有下雨。\n");
printf("今天會(huì)有太陽嗎?(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èi)。\n");
}
}
else
printf("第一次輸入答案不在選擇范圍內(nèi)。\n");
}
先看
fun(a+
)
里面
fun(d)
d是全局變量
值為1
再看fun(1)
把1傳給fun的形參p
進(jìn)入fun
p
為1
fun內(nèi)有
局部靜態(tài)變量d
初值為5
d+=p
使之
變?yōu)?
輸出d
(局部變量,全局變量名也是b被屏蔽,因此這個(gè)d是fun內(nèi)的局部變量d)
所以輸出6
return
返回6
fun(1)返回6
fun(a+6)
a是3
3+6的值9
傳給fun的形參p
這是第二次調(diào)用fun函數(shù)
p為
9
由于d是
靜態(tài)局部變量
故再次調(diào)用fun函數(shù)
其中為上一次調(diào)用保留的值6
d+=p
使之
變?yōu)?5
fun函數(shù)內(nèi)
輸出
靜態(tài)局部變量d的值15
fun(9)返回15
返回的15給main函數(shù)的printf輸出
有輸出15
所以是
61515