昨天,我看到了下面的函数。
static void swap (int *p, int *q) {
*p -= *q;
*q += *p;
*p = *q - *p;
}
在什么情况下这个功能不起作用?我认为可能存在溢出问题,而且效率也可能很低。还有什么吗?
最佳答案
溢出问题不是“可能”,它肯定存在:当您将高幅度的负数与大的正数交换时,会发生溢出,根据标准,这是未定义的行为。
但最重要的是,出于可读性的原因,绝对没有必要使用这个(或 xor 技巧)代替通常的交换(通过临时变量)。
关于c - 交换两个变量内容的另一种方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12437459/