交换算法之加减法
前面的章节中介绍了C语言交换算法中的临时变量法,算是比较基础的一种方法,但是使用定义了一个临时的变量来临时存储参数(指针)指向的内存地址中存储的值,这就需要一个额外的内存空间。
这里介绍的加减法并不需要增加一个额外的内存空间,但是需要溢出防范,具体的可参考下方的示例代码。
加减法示例代码
cpp
bool __builtin_add_overflow(type a, type b, type *res)
该函数是一些GCC和Clang编译器内置的函数,可以用于检测整数的加法是否会导致溢出。
cpp
#include <stdio.h>
#include <limits.h>
void swapNumber(int *a, int *b) {
if( a == b ) return;
int sum;
if(__builtin_add_overflow(*a, *b, &sum)){
printf("整数溢出!\n");
return;
}
*a = *a + *b;
*b = *a - *b;
*a = *a - *b;
}
int main() {
int x = 255;
int y = 166;
swapNumber(&x, &y);
printf("加减法置换数值之后: x = %d, y = %d\n", x, y);
return 0;
}
代码编译运行,得到输出:
cpp
加减法置换数值之后: x = 166, y = 255
全栈开发助手原文:C语言 交换算法之加减法,及溢出防范
免责声明:内容仅供参考!