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

C 語言函數傳遞指標:f(&x) 將變數位址傳給參數 int *u

     編輯:程式設計綜合問答

程式碼對照


void f(int *u);  // 宣告:參數為 int 指標

int main() {
    int x = 10;
    f(&x);        // 呼叫:傳遞 x 的位址 (&x)
}

void f(int *u) {
    // 此處 u 接收 &x 的值,即 x 的位址
    *u = 20;      // 透過指標修改 x 的值
}

記憶體圖解


main 棧框:          f 棧框:
+--------+          +--------+
| x: 10  | 0x7ff... | u: 0x7ff... |  ← u 存放 &x (0x7ff...)
+--------+          +--------+
       │                  │
       └──────────────────┘  指向同一記憶體位置

關鍵釐清

  • int *u 宣告 **u 是指標**,型別為 `int*`。
  • &x 取得 **x 的位址**,型別 `int*`,**型別匹配**,賦值給 `u`。
  • **被賦值的是 `u`** (指標變數本身),**不是 `*u`** (指標指向的內容)。
  • 函數內 `*u = 20` 才是修改 **指向的內容** (即 `x`)。

常見誤區

誤解正確
以為 `*u` 是參數參數是 `u` (指標),`*u` 是解參考運算
以為傳遞的是 `x` 的值傳遞的是 `x` 的**位址** (`&x`),故稱「傳址呼叫」
以為 `u` 是「位址的位址」`u` 就是位址 (指標值),不再是位址的位址

進階:const 正確性


// 僅需讀取,不修改
void printInt(const int *u) {
    printf("%d\n", *u); // OK
    // *u = 10; // 編譯錯誤:不能修改 const 指向的值
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved