WeHelp
C 語言是一種通用的、程序式的程式語言,可直接對記憶體與硬體進行操作,效率極高。
  1. C 特色用途、相關職務
  2. Windows 環境建置、測試
  3. Mac 環境建置、測試
  4. Linux 環境建置、測試
  5. C 標準輸出、輸入
  6. C 資料型態
  7. C 變數使用
  8. C 運算符號
  9. IF 條件判斷
  10. Switch 條件判斷
  11. While 迴圈
  12. For 迴圈
  13. Array 陣列
  14. String 字串
  15. Function 函式
  16. 標準函式庫
  17. Struct 結構
  18. Pointer 指標
  19. 指標與函式參數
  20. 指標與陣列
  21. 指標與結構
  22. 動態配置記憶體
指標與函式參數
在 C 語言中,函式參數預設都是**傳值(pass by value)**。若希望函式能修改呼叫端的變數,必須傳入該變數的**位址**,也就是使用 Pointer(指標)。 ## 1. 不透過指標傳遞參數 傳入的是變數的副本,函式內修改參數,不會影響原本的變數。 ```c #include <stdio.h> void add_one(int x) { x = x + 1; } int main(void) { int number = 10; add_one(number); printf("%d\n", number); // 仍然是 10 return 0; } ``` `add_one(number)` 將 `number` 的值複製給 `x`,因此 `x` 和 `number` 是不同的變數。 --- ## 2. 透過指標傳遞參數 傳入的是變數的位址,函式可以透過指標存取並修改原本的變數。 ```c #include <stdio.h> void add_one(int *x) { *x = *x + 1; } int main(void) { int number = 10; add_one(&number); printf("%d\n", number); // 11 return 0; } ``` 說明: - `&number`:取得 `number` 的位址 - `int *x`:宣告 `x` 是指向 `int` 的指標 - `*x`:取得指標所指向的變數內容 - `*x = *x + 1`:直接修改 `number` ## 差異整理 | 傳遞方式 | 函式取得的內容 | 能否修改呼叫端變數 | |---|---|---| | 不使用指標 | 變數的副本 | 不能 | | 使用指標 | 變數的位址 | 可以 | 嚴格來說,C 語言仍然是「傳值」,即使傳遞指標時,傳入的也是**指標位址的副本**;只是透過這個位址,可以修改原本的資料。
相關學習地圖、教學課程
C 語言,系統程式
掌握基礎的 C 語法,以及進階的系統程式開發能力。