zltzlt 发表于 2020-1-6 20:04:27

C++ 交换变量

// 交换变量

#include <iostream>
using namespace std;

int main() {
        int a = 0, b = 1, c;
        // 第一种方法:利用中间变量 c 实现变量交换
        c = a;
        a = b;
        b = c;
        cout << a << " " << b << endl;
        // 第二种方法:不用中间变量 c 实现交换
        a = a + b;
        b = a - b;
        a = a - b;
        cout << a << " " << b << endl;
        return 0;
}

Croper 发表于 2020-1-6 22:27:13

提示下,当涉及到指针时,慎用第二种方法。
因为两个指针指向同一个地址时,第二种方法会产生诡异的错误:
其实解释起来很简单,但应用时很容易忽略这一点int main() {
        int a = 5;
        int *p = &a;
        int *q = &a;
        // 第一种方法:利用中间变量 c 实现变量交换,
        int c = *p;
        *p = *q;
        *q = c;
        cout << *p << " " << *q << endl; //p和q的值没有发生改变,自己跟自己交换当然不应该发生改变;

        // 第二种方法:不用中间变量 c 实现交换
        *p = *p + *q;
        *q = *p - *q;
        *p = *p - *q;
        cout << *p << " " << *q << endl; //此时,*p=*q=0,这不是预期的结果。
        return 0;
}

页: [1]
查看完整版本: C++ 交换变量