首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言靜態局部變量與參數傳遞:sub 函數輸出全為 0

     編輯:程式設計疑難解答

代碼

void sub(int s[], int y) {
    static int t = 3;
    y = s[t];
    t--;
}
main() {
    int a[] = {1,2,3,4}, i, x = 0;
    for (i = 0; i < 4; i++) {
        sub(a, x);
        printf("%d", x);
    }
}

選項:A)1234 B)4321 C)0000 D)4444

分析

  1. `sub` 參數 `int y` 為**值傳遞**,函數內 `y = s[t]` 僅修改副本,**不影響實參 `x`**。
  2. `static int t = 3`:首次調用 `t=3` → `s[3]=4`,`t--`→2;第二次 `t=2` → `s[2]=3`,`t--`→1;第三次 `t=1` → `s[1]=2`,`t--`→0;第四次 `t=0` → `s[0]=1`。但 `x` 始終為 0。
  3. `printf("%d", x)` 每次輸出 `0`。

答案:**C) 0000**

驗證

在線運行結果 確為 `0000`。

修正若需輸出 4321

void sub(int s[], int *y) { // 傳指針
    static int t = 3;
    *y = s[t];
    t--;
}
main() {
    int a[] = {1,2,3,4}, i, x;
    for (i = 0; i < 4; i++) {
        sub(a, &x);
        printf("%d", x);
    }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved