1樓:匿名使用者
第一次 fun(2), y=1,x=2y*=2+1;
y=3*y;
y=3;
第二次 fun(fun(2)),x=fun(2)=y=3//因為y是靜態變數, fun(2)是返回值y
靜態區域性變數儲存在全域性資料區,而不是儲存在棧中,每次的值保持到下一次呼叫,直到下次賦新值。
y*=3+1;
y=y*4;
y=12;
2樓:
結果為12;
static區域性變數是一種比較特殊的變數,它在程式執行時就已經執行完畢,變數y在靜態儲存區內分配記憶體,並初始化為1.
(1)程式開始後,首先為int型變數y在靜態儲存區內分配記憶體,並初始化為1;
(2)程式進入main函式後,執行fun(fun(2)),首先執行內部的fun(2),首次呼叫函式fun,將實際引數值2傳遞給fun的形式引數x;
(3)程式進入fun函式後,直接執行y*=x+1,由於y是靜態變數,因此跳過static int y =1的定義;執行結果y = 3,函式返回3;
(4)程式執行外層的fun呼叫,即執行fun(3),3是內層fun返回的值,進入fun函式,執行y*=x+1,即y=y*(x+1)=3*(3+1)=12(此時的y值因為上一次的呼叫已被賦值為3),函式返回12;
(5)程式結束,釋放靜態變數y。
3樓:檻外人網上人生
結果為12
static int y=1;這一句使變數y變成了靜態全域性變數。y=1只是在第一次執行函式的時候用於獲取初始值。以後再呼叫函式時y=1就不再執行,而是直接執行return y*=x+1;
fun(2) y=y*(x+1)=1*3=3
fun(fun(2)) y=y*(x+1)=3*4=12
4樓:
fun(fun(2))相當於
int result = fun(2);
fun(result);
fun(2)進入函式體後,如果你是初次呼叫fun()函式,那麼y初始化為1,
返回值是3, y值保留,也是3;
fun(result),由於y是靜態變數,不會重新初始化,保留上次的值,是3,
返回值12
所以fun(fun(2))的結果為12
5樓:匿名使用者
12;因為y定義成靜態的了,所以fun(2) = 3,此時y=3,第二次呼叫fun()函式時y=3,因此fun(fun(2))=fun(3)=3*4=12;
6樓:匿名使用者
很無聊的題目。天知道你之前有沒有呼叫過fun。
在c語言中以下合法的字元常量是在C語言中,以下合法的字元常量是
選ca 有雙引號,是字串 b 單引號裡只能一個字元 d 0表明是8進位制,只能出現0 7的數字e 書寫不完整,右半邊的單引號沒了 答案是c。各答案解析 a 有雙引號,是字串 b 單引號裡只能一個版字元 d 0表明是8進位制,只 能出現權0 7的數字 e 書寫不完整,右半邊的單引號沒了 拓展 在c語言...
C語言中函式宣告的位置有幾種,在C語言中,函式定義跟函式宣告有什麼區別有什麼不同之出?
1.把子函式放主函式main函式外並且是之前定義,無需宣告。2.如果你把子函式放到main函式外,則必須在定義的時候先宣告。3.如果把 子函式放在main函式中就不需要提前宣告瞭。首先,你提的問題就有問題。c是一門程式語言,函式是在源 裡面宣告的。所以你該問在c語言編寫的源 裡,函式宣告的位置有幾種...
C語言中log函式怎麼使用,C語言中log函式怎麼使用啊
log number 必要的抄 number 引數是襲 double 或任何bai有效的大於 0 的數值表示式。duzhi 說明自然對數是以 e 為底的對數。dao常數 e 的值大約是 2.718282。如下所示,將 x 的自然對數值除以 n 的自然對數值,就可以對任意底 n 來計算數值 x 的對數...