2 回答

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊
printf 打印的是什么? 是 fun() 的值!? 這是什么意思?
這里的 fun() 就是個(gè)表達(dá)式,這是“函數(shù)調(diào)用表達(dá)式”。還記得吧,每個(gè)表達(dá)式都有值,“調(diào)用表達(dá)式”的值就是函數(shù)的返回值。
當(dāng)然,fun 函數(shù)需要被調(diào)用運(yùn)行才會(huì)得到返回值,所以 printf("%d",fun()); 這一語(yǔ)句執(zhí)行期間,fun 函數(shù)確實(shí)被調(diào)用了,它返回的值被 printf 打印了出來(lái)。
我們來(lái)看看 fun 函數(shù)中到底執(zhí)行了什么:
int?fun() { ????static?int?k?=?0; ????return?++k; }
k 并不是一個(gè)普通的函數(shù)局部變量,它被 static 修飾了。這樣的變量在函數(shù)第一次被調(diào)用時(shí)被初始化,而后函數(shù)再次調(diào)用時(shí),該變量會(huì)保留有前次函數(shù)調(diào)用時(shí)的值(并不會(huì)被再次初始化)
函數(shù)返回 ++k,我相信對(duì)自增你已經(jīng)很清楚了,這里會(huì)返回 ++k 表達(dá)式的值,也就是 k 自增后的值。
在 printf 語(yǔ)句之前,for 循環(huán)已經(jīng)調(diào)用過(guò) 5 次 fun 了。也就是在 for 語(yǔ)句中 fun 被首次調(diào)用,后又被調(diào)用了 4 次。
在首次調(diào)用 fun 時(shí),k 被初始化為 0,然后返回了 ++k 的值,不過(guò)返回值并沒(méi)有被使用,所以我們不管它。但是自增的副作用確實(shí)發(fā)生了,所以第一次調(diào)用 fun 之后,其中 k 的值自增為 1。
for 中第二次調(diào)用 fun 時(shí),因?yàn)?k 是 static 修飾的,所以 k 不會(huì)被再次初始化為 0,而是保留了上次的值 1。這樣最后 return 語(yǔ)句再次讓 k 自增為 2。
第三次調(diào)用時(shí)同理,最后 k 的值變?yōu)?3。
for 中的最后一次調(diào)用,也就是第 5 次調(diào)用 fun 之后,k 的值變?yōu)?5。
后面才是 printf 語(yǔ)句,這里又調(diào)用了一次 fun。此時(shí) k 為 5,所以 ++k 表達(dá)式的值為 6,這樣 fun 最后返回 6。? printf 就打印出 fun 的返回值 6。
- 2 回答
- 0 關(guān)注
- 1038 瀏覽
添加回答
舉報(bào)