除了输入是具有相同值的两个数组之外,此交换功能是全部功能:
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] = 0
和j[0] = 0
。
答案 0 :(得分:6)
这是聪明交换的常见问题(另请参阅:XOR交换)。用临时的方法直接做到这一点!
int t = *a;
*a = *b;
*b = t;
在实践中,您可能会检查指针是否不同,以避免出现 this 问题,但是*a + *b
在溢出时仍然具有未定义的行为,因此没有理由担心