c语言-交换两个整数

Posted fk12138

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言-交换两个整数相关的知识,希望对你有一定的参考价值。

使用c来写一个函数来实现交换两个整数。

第一种

一般的方法,引用中间变量,方便快捷。

1 void swap(int *a, int *b)
2 {
3     int tmp = *a;
4     *a = *b;
5     *b = tmp;
6 }

第二种

void swap(int *a, int *b)
{
    int tmp = *a + *b;
    *b = tmp - *b;
    *a = tmp - *b;
}

tmp虽然可能会溢出,但是依然能够达到交换的效果。

 

上面的都是引用了中间变量,再看看不使用中间变量的方法。

不使用中间变量虽好,但是如果a,b的值一样,说明交换的是同一个变量,执行之后的操作就会出现问题。

第三种

void swap(int *a, int *b)
{
if(a == b){
return;
}
*a = *a + *b; *b = *a - *b; *a = *a - *b; }

第四种

void swap(int *a, int *b)
{
if(a == b){
return;
}
*a = *a - *b; *b = *a + *b; *a = *a - *b; }

第五种

void swap(int *a, int *b)
{
if(a == b){
return;
}
*a = *a ^ *b; *b = *a ^ *b; *a = *a ^ *b; }

一般来说使用位操作比加减运算要快

第六种

void swap(int *a, int *b)
{
if(a == b){
return;
}
*a = *a * *b; *b = *a / *b; *a = *a / *b; }

这种方法虽然很搓,但也是一种方法。。。

第七种

 1 void swap(void *a, void *b, int length)
 2 {
 3     void *tmp = malloc(length);
 4     if(tmp == NULL){
 5         fprintf(stderr, "the memory is full \n");
 6         exit(1);
 7     }
 8     memcpy(tmp, a, length);
 9     memcpy(a, tmp, length);
10     memcpy(b, a, length);
11     free(tmp);
12     tmp = NULL;
13 }

第七种是一种通用的写法,可以用于任何类型的变量的交换。前提,这两个变量所占空间一样

以上是关于c语言-交换两个整数的主要内容,如果未能解决你的问题,请参考以下文章

c语言-交换两个整数

c语言实现交换两个整数 三种常见方法

Python语言编写程序,将两个整数a和b合并成一个整数放到c里面,并打印出来?

C语言中怎样交换两个字符串

嗯嗯 用c语言编写从键盘输入10个整数,将最小值与第一个数交换,最大值与最后一个交换,然后输出交换后的数

C语言编程