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

C 語言排序函數指標錯誤:交換邏輯中臨時變數宣告誤用

     編輯:程式設計疑難解答

錯誤程式碼

void max(int *x, int *y) {
    int *z;          // 錯誤:宣告為指標
    if (*y > *x) {
        *z = *x;     // 解參考未初始化指標 -> 未定義行為
        *x = *y;
        *y = *z;
    }
}

問題分析

  • int *z 宣告了一個指標變數,但未指向有效記憶體位址。
  • 執行 *z = *x 時,嘗試寫入隨機位址,導致程式崩潰或資料損毀。

正確修法

臨時變數應宣告為整數型別,而非指標。

void max(int *x, int *y) {
    int z;           // 正確:宣告整數變數
    if (*y > *x) {
        z = *x;
        *x = *y;
        *y = z;
    }
}

補充:函數命名與邏輯

  • 函數名 max 易誤解為「求最大值」,實際功能是「將兩值按大小排序 (大者前置)」,建議改名如 sortDesc 或 swapIfGreater。
  • 主程式中多次呼叫 max 可實現簡單的四數排序(冒泡思想),但邊界情況需注意。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved