功能交换功能(在一种情况下除外)

时间:2019-10-25 23:37:13

标签: c

除了输入是具有相同值的两个数组之外,此交换功能是全部功能:

void permuter(int* a, int* b) {
    *a = *a + *b;
    *b = *a - *b;
    *a = *a - *b;
}

int main(void) {
    int i[0];
    int j[0];
    i[0] = 5;
    j[0] = 5;
    permuter(&j[0], &i[0]);
    return 0;
}

使用printf(); i[0] = 0j[0] = 0

1 个答案:

答案 0 :(得分:6)

这是聪明交换的常见问题(另请参阅:XOR交换)。用临时的方法直接做到这一点!

int t = *a;
*a = *b;
*b = t;

在实践中,您可能会检查指针是否不同,以避免出现 this 问题,但是*a + *b在溢出时仍然具有未定义的行为,因此没有理由担心