C語言基礎

void f(int a[10]) {
    printf("%zu\n", sizeof a);
}
int main(void) {
    int b[10] = {0};
    printf("%zu ", sizeof b);
    f(b);
    return 0;
}

int 為4位元組,指標為8位元組。執行上方程式時的輸出,下列何者正確?

  1. A10 10
  2. B40 8
  3. C40 40
查看答案與解析

正確答案:B. 40 8

main 中的 b 是有10個元素的 int 陣列,因此 sizeof b 為 10 × 4 = 40 位元組。即使把函式的參數寫成 int a[10],參數也不是陣列,而是被當作指向 int 的指標(int *a),f(b) 只會傳入陣列第一個元素的位址。因此 f 中的 sizeof a 是指標的大小8。gcc 的 -Wall 會對這個 sizeof 發出警告。在函式中需要陣列的元素數時,要另外以引數傳入元素數。

  • A. sizeof 回傳的不是元素數,而是位元組數。
  • B. 正確。main 中是整個陣列的40位元組,f 中是指標的8位元組。
  • C. 參數 a 不是陣列而是指標,因此在 f 中不會是40。
練習這個領域 前往領域頁面

C語言基礎的其他題目

  1. int 為4位元組。執行上方程式碼時的輸出,下列何者正確?
  2. 關於放入字串的 char 陣列,執行上方程式碼時的輸出,下列何者正確?
  3. 在上方的宣告之後,寫入甲「p = t;」、乙「*p = 'x';」、丙「q = t;」、丁「*q = 'x';」其中之一。會發生編譯錯誤的組合為下列何者?
  4. 執行上方使用函式指標陣列的程式時的輸出,下列何者正確?
  5. fill 與 use 是另外定義的函式。上方函式的問題點,下列何者正確?