這個很麻煩,不過不難。每次計算的時候,搞清楚各個值就好了。
創(chuàng)新互聯(lián)主營柴桑網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP開發(fā),柴桑h5小程序制作搭建,柴桑網(wǎng)站營銷推廣歡迎柴桑等地區(qū)企業(yè)咨詢
首先
func調(diào)用兩次,參數(shù)都是主函數(shù)的k和m
這兩個值是不變的。也就是說
兩次都是func(4,1)
對于func
第一次
a=4
b=1
m=0
i=2
//初始化
i+=m+1
-
i=i+m+1=2+0+1=3
m=i+a+b=3+4+1=8
返回8
于是第一個printf輸出8,
第二次
a=4
b=1
m=8
i=3
//這兩個變量是static
的,所以第二次進入的時候,m和i都是第一次退出時的值。
i+=m+1
-
i=i+m+1=3+8+1=12
m=i+a+b=12+4+1=17
返回17
于是第二個printf輸出17
選A
動態(tài)函數(shù)執(zhí)行結(jié)束后,函數(shù)占用的內(nèi)存會被注銷掉,數(shù)值不保留,靜態(tài)就可以保留數(shù)值
樓上只說一半,可致電A和B是兩個功能確實使用包括添加a.cpp和b.cpp的main.cpp里面使用包括實際的相應(yīng)的代碼的位置。真的做的項目沒有這樣做,并正在使用的頭文件,
靜態(tài)函數(shù)和變量在其他文件中是完全不可見的,這是錯誤的的地方樓上,即使有出口extern聲明函數(shù)不能在編譯的時候沒有通過,將上報的靜態(tài)類型錯誤,不能導(dǎo)出。 。 。在
頭文件中加入你的原始文件結(jié)構(gòu):
/ /啊
#包括
使用命名空間std;
無效的(??); BR / / / BH
無效();
然后改變里面的兩個main.cpp中包括AH和BH編譯:g+ +的main.cpp的a.cpp b.cpp會發(fā)現(xiàn)報告的錯誤:
a.cpp:在函數(shù)'無效():
a.cpp:3:錯誤:無效()“被宣布為”外部“和后來的”靜態(tài)“
啊:3:錯誤:()先前的聲明“無效”
這里是因為一個函數(shù)的靜態(tài)類型,你不能出口,擺脫靜態(tài)這里可以編譯通過。 。 。 。
這是靜態(tài)的使用
原因就是會造成空間的浪費,當系統(tǒng)調(diào)用函數(shù)是,事實它是在建副本(我這么說你能理解吧),在副本里面把所有的東西都運算處理在返回結(jié)果,然后把建副本的資源清掉回收,如果你是用了,靜態(tài)變量和函數(shù),那么在資源回收時就不回收這一部分的,等于下次要用時能繼續(xù)用,一般是為了滿足某種特殊需求而使用;如果全部都用,那就太浪費空間了