C語言基礎

int f(void) {
    static int s = 0;
    int a = 0;
    s++;
    a++;
    return s * 10 + a;
}

連續呼叫上方的函式 f 三次時,第3次的回傳值為下列何者?

  1. A11
  2. B13
  3. C31
查看答案與解析

正確答案:C. 31

加上 static 的區域變數 s,只在程式開始前初始化為0一次,函式返回後值仍會保留。因此 s 隨每次呼叫增加為1、2、3。沒有 static 的 a 每次呼叫都會重新建立並從0開始,因此每次都是1。第3次的回傳值為 3 × 10 + 1 = 31。

  • A. 這是認為 s 也在每次呼叫時從0開始的值。static 變數的值會保留。
  • B. 這是把 static 的 s 與沒有 static 的 a 的作用對調時的值(s = 1、a = 3)。
  • C. 正確。s 增加到3,a 每次都是1,因此 3 × 10 + 1 = 31。
練習這個領域 前往領域頁面

C語言基礎的其他題目

  1. C語言中,(1) 在函式中沒有加 static 宣告的區域變數、(2) 以 malloc 配置的區域、(3) 在函式外宣告的變數,各自存在的期間(生命週期)的組合,下列何者正確?
  2. int 為32位元(最大值 2147483647)。上方的函式 fact(n) 能不發生溢位、正確回傳 n 的階乘的最大 n 為下列何者?
  3. int 為4位元組,指標為8位元組。指向 int 的指標 p 的值(位址)為 0x1000 時,p + 3 的值為下列何者?
  4. int 為4位元組,指標為8位元組。執行上方程式時的輸出,下列何者正確?
  5. int 為4位元組。執行上方程式碼時的輸出,下列何者正確?