我參加了 Udemy 上的 C 高級課程,那里有一個問題:以下代碼的輸出是什么?
#include <stdio.h>
int main(void){
static int i=5;
if(--i){
main();
printf("%d ", i);
}
}
正確答案是4 3 2 1,但是當我在 IDE(和在線編譯器)中運行此代碼時,它會列印0 0 0 0. 在課程中,lector 使用 cygwin 編譯器,我有 g 。可能是不一致的原因嗎?另外我想知道if(--i)方法是否更快,然后for通過性能概念回圈?
謝謝你。
uj5u.com熱心網友回復:
發布的代碼應列印,0 0 0 0因為printf是在遞回呼叫之后,即
main(); // Recursive call
printf("%d ", i); // Print after
如果你這樣做:
printf("%d ", i); // Print before
main(); // Recursive call
輸出將是 4 3 2 1
所以我認為你的lector使用了最后一種形式,而你使用了第一種形式,即不同的代碼,不同的結果
uj5u.com熱心網友回復:
原因是main()在呼叫之前printf("%d ", i)。因此,當執行 if 塊時,main()在列印值之前呼叫函式,i并繼續這樣做直到if-condition為假。這里if-condition在i等于時變為假0。當if-contidion為假時,函式從它被呼叫的地方回傳到先前的狀態,然后列印 的值i,即現在的0。
要列印4 3 2 1,請在呼叫main()函式之前列印值,如下所示
int main(void){
static int i=5;
if(--i){
printf("%d ", i);
main();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/314068.html
上一篇:Python:如何在使用2D布爾掩碼時從2Dnumpy陣列逐行獲取所有第一個值
下一篇:優化MongoDB聚合查詢性能
