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

C 語言指針作為函數參數應用:交換變量與冒泡排序實戰

     編輯:關於C語言

核心概念

C 語言參數傳遞為**值傳遞**。若需在函數內修改實參值,必須傳遞實參地址(指針),在函數內解引用修改。

1. 交換兩整數

方法一:臨時變量

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

方法二:無臨時變量(算術/位運算)

void swap1(int *a, int *b) {
    *a = *a + *b;
    *b = *a - *b;
    *a = *a - *b;
    // 或異或交換: *a ^= *b; *b ^= *a; *a ^= *b;
}

注意:算術法可能溢出,異或法通用且無溢出風險。

2. 冒泡排序(指針版)

void bubbleSort(int *array, int len) {
    for (int i = 0; i < len; i++) {
        for (int j = 1; j < len - i; j++) {
            if (array[j] < array[j-1]) {
                swap1(&array[j], &array[j-1]);
            }
        }
    }
}

void displayIntArray(int *a, int len) {
    for (int i = 0; i < len; i++) printf("%d ", a[i]);
    printf("\n");
}

3. 完整主程序

int main() {
    int a = 0xffffffff, b = 0xfffffffe;
    printf("before: a=%d, b=%d\n", a, b);
    swap1(&a, &b);
    printf("after : a=%d, b=%d\n", a, b);

    int arr[10] = {9,1,2,5,6,3,4,8,7,10};
    printf("原數組: "); displayIntArray(arr, 10);
    bubbleSort(arr, 10);
    printf("排序後: "); displayIntArray(arr, 10);
    return 0;
}

運行結果

before: a=-1, b=-2
after : a=-2, b=-1
原數組: 9 1 2 5 6 3 4 8 7 10
排序後: 1 2 3 4 5 6 7 8 9 10

關鍵點總結

  • 函數參數聲明為指針類型(int *a)。
  • 調用時取實參地址(&a、&array[j])。
  • 函數體內用 *a 訪問/修改實際值。
  • 數組名作參數自動退化為指針,int *array 等價 int array[]。
  • 指針參數實現了**模擬引用傳遞**,是 C 語言修改外部變量的標準方式。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved