C語言基礎

void f(int x) { x = 10; }
void g(int *p) { *p = 20; }
int main(void) {
    int a = 1, b = 1;
    f(a);
    g(&b);
    printf("%d %d\n", a, b);
    return 0;
}

執行上方程式時的輸出,下列何者正確?

  1. A1 20
  2. B10 1
  3. C10 20
查看答案與解析

正確答案:A. 1 20

C語言函式的引數是傳值,呼叫 f(a) 時,a 的值1會被複製到 x。即使在 f 中把 x 改為10,改變的也只是複本,呼叫端的 a 仍是1。g(&b) 傳入的是 b 的位址,因此 g 中的 *p = 20 寫入的是 b 本身,b 變成20。要在被呼叫的函式中改變呼叫端的變數時,就像這樣傳入指標。

  • A. 正確。以值傳入的 a 不變,傳入位址的 b 變成20。
  • B. 這是把 f 與 g 的作用想反時的值。傳值的 f 不會改變 a,接收位址的 g 會改變 b。
  • C. 在 f 中改變的只有引數 x(a 的複本),a 仍是1。
練習這個領域 前往領域頁面

C語言基礎的其他題目

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