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

C 指針交換兩數值的邏輯簡化:從算術交換到臨時變量

     編輯:程式設計綜合問答

原代碼


void DoesSomething(int *first, int *second) {
    *first = *second - *first;
    *second = *second - *first;
    *first = *second + *first;
}

邏輯分析

利用加減法實現無臨時變量交換:
1. *first = b - a
2. *second = b - (b - a) = a
3. *first = a + (b - a) = b
最終 *first=b, *second=a。**功能等價於交換兩數值。**

缺點

  • 可讀性極差,維護成本高。
  • 整數溢出風險 (大數相減/相加超出 INT_MAX) 導致未定義行為。
  • 浮點數精度丟失。

標準簡化寫法


void DoesSomething(int *first, int *second) {
    int tmp = *first;
    *first = *second;
    *second = tmp;
}

現代 C++ 最佳實踐


#include 
void DoesSomething(int &first, int &second) {
    std::swap(first, second); // 類型安全、支持移動語義、可優化
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved