c - 交换两个变量内容的另一种方式?

标签 c pointers swap

昨天,我看到了下面的函数。

static void swap (int *p, int *q) {
    *p -= *q;
    *q += *p;
    *p = *q - *p;
}

在什么情况下这个功能不起作用?我认为可能存在溢出问题,而且效率也可能很低。还有什么吗?

最佳答案

溢出问题不是“可能”,它肯定存在:当您将高幅度的负数与大的正数交换时,会发生溢出,根据标准,这是未定义的行为。

但最重要的是,出于可读性的原因,绝对没有必要使用这个(或 xor 技巧)代替通常的交换(通过临时变量)。

关于c - 交换两个变量内容的另一种方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12437459/

相关文章:

c - vscode 中 c 代码未显示问题

c - 使用 malloc 为其分配内存后如何加载结构?

android - 在android中的屏幕上交换图像

c# - 交换技巧 : a=b+(b=a)*0;

c++ - 当使用自定义比较器交换相同类型的标准库容器时,为什么会发生此错误?

c - 当我尝试重新创建管道/ fork 新进程时,进程卡住了

c - 在 C 中打印枚举映射映射

c - for 循环变量溢出时的行为和编译器优化

c - 将数据写入 C 中另一个程序的指针?

c - Quicksort C - 段错误