在c語言中,若有以下函式

2022-02-15 13:11:21 字數 1376 閱讀 7693

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 的對數...