函數(shù)其實沒有釋放內(nèi)存的概念,因為函數(shù)都是在指令區(qū),而不是通常所說的釋放內(nèi)存對應(yīng)的數(shù)據(jù)區(qū),不過在整個程序執(zhí)行完之后指令區(qū)也是要釋放的。
公司主營業(yè)務(wù):做網(wǎng)站、網(wǎng)站建設(shè)、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出興業(yè)免費做網(wǎng)站回饋大家。
函數(shù)調(diào)用的大概過程如下:
1,將調(diào)用函數(shù)的上下文入棧;
2,調(diào)用被調(diào)用函數(shù);
3,被調(diào)換函數(shù)執(zhí)行;
4,調(diào)用函數(shù)上下文出棧,繼續(xù)執(zhí)行后繼指令。
所以在函數(shù)調(diào)用過程中原調(diào)用函數(shù)是不會退出的-----即你所說的釋放內(nèi)存。
具體到你給的代碼:
首先main中調(diào)用test,
進入test后要求讀入一個char,
你輸入'1'后執(zhí)行case
'1'中語句,所以輸出“已調(diào)用”,然后就執(zhí)行test()語句,即遞歸調(diào)用,此時main調(diào)用的test要等新的test執(zhí)行完畢才能繼續(xù)執(zhí)行后繼的i++語句;
再次進入test之后與從main中進入時一樣,如果輸入的是'1'會接著遞歸調(diào)用test,由于你輸入了5次1,所以會繼續(xù)調(diào)用5次test;
在最后一個test中你輸入了ESC?
所以不再走case
'1'而走default了,所以輸出"222222";
switch執(zhí)行完之后判斷c==27滿足,所以while循環(huán)退出,繼續(xù)執(zhí)行printf語句,由于之前的test統(tǒng)統(tǒng)沒有執(zhí)行過case
1里的i++語句,所以全局變量i還是0;輸出i=0;
到此最后一次test執(zhí)行完畢;
倒數(shù)第二次的test繼續(xù)執(zhí)行i++,
所以i=2了,case
1執(zhí)行完畢,但由于沒有寫break語句,所以繼續(xù)執(zhí)行default
語句,輸出"222222",
退出switch語句,判斷c==27,
由于c是全局變量,且最后一次輸入的剛好是ESC,
所以判斷滿足,
退出while循環(huán),輸出i=1,
到此倒數(shù)第二次test執(zhí)行完畢;
與倒數(shù)第二次類似的繼續(xù)執(zhí)行倒數(shù)第三、倒數(shù)第四、倒數(shù)第五和最終的第一次test后繼代碼,也就輸出如你列出的結(jié)果了。
int gys(int,int);
你說的是這一句吧。
這是聲名了 一個叫g(shù)ys返回值類型是 int類型的函數(shù)。
gys是函數(shù)名
C語言中'\n'是換行的意思,一般放到printf()這類函數(shù)中使用,比如:
printf("this
is
a
test\n
Please
check
it\n");
結(jié)果是:
this
is
a
test
Please
check
it