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位元組。執行上方程式時的輸出,下列何者正確?
- A10 10
- B40 8
- 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。