首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言入門

C語言函式交換兩數:指標傳址呼叫完整教學

     編輯:C 語言入門

核心概念:C 語言只有傳值呼叫

若要在函式內修改呼叫端變數,**必須傳遞變數位址**(指標)。

標準交換函式

void swap(int *a, int *b) {
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

完整程式碼

#include 

void swap(int *a, int *b);

int main() {
    int x = 10, y = 20;
    printf("Before: x=%d, y=%d\n", x, y);
    swap(&x, &y); // 傳遞位址
    printf("After:  x=%d, y=%d\n", x, y);
    return 0;
}

void swap(int *a, int *b) {
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

關鍵細節

錯誤寫法原因正確寫法
`void swap(int a, int b)`傳值,修改副本不影響原變數`void swap(int *a, int *b)`
`swap(x, y)`傳值`swap(&x, &y)`
`*a = *b; *b = *a;`先複製導致兩者皆為原 `b` 值需暫存變數 `tmp`

宏版本(效能極致)

#define SWAP(a,b) do { typeof(a) tmp = a; a = b; b = tmp; } while(0)
// GNU C typeof 延伸,標準 C11 可用 _Generic 實作類型泛型宏

總結

函式交換兩數 = **指標參數 + 暫存變數 + 解參考賦值**。這是 C 語言「模擬傳址呼叫」的最基礎模式,適用於所有型別(結構體、陣列指標等)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved