首页 > 解决方案 > 除一种情况外的功能交换功能

问题描述

此交换函数功能齐全,除非输入是具有相同值的两个数组:

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

标签: c

解决方案


这是智能交换的常见问题(另请参见:XOR 交换)。做它直接的方式,用一个临时的!

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

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


推荐阅读