您的位置:首页 > 编程语言 > C语言/C++

用C语言实现两变量内容交换的N种方法

2016-09-20 08:21 567 查看
一:创建变量实现交换

1.#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
int c;
printf("before change:a=%d  b=%d\n",a,b);
c = a;
a = b;
b = c;
printf("after change:a=%d  b=%d\n",a,b);
return 0;
}//可成功运行


//如使用函数调用,结果则不发生改变

void swap(int x,int y)

{int temp;        /*该错误属于运行式错误,

temp=x;             形式参数在内存中创立了新的空间,,

x=y;                    运行调用函数后,只改变了x,y的地址空间内容,

y=temp;             而实参a,b的实际内容却并未改变。*/

}

2.改传值调用为传址调用

</pre></p><pre name="code" class="cpp">void swap(int *p1,int *p2)
{
int temp=*p1;
*p1=*p2;
*p2=temp
}//通过指针改变了变量的内容并未改变变量地址


3.利用指针通过改变变量的地址实现内容交换

#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
int *p1,*p2,*p
printf("before change:a=%d b=%d\n",a,b);
p1=&a;
p2=&b;
p=p1;
p1=p2;
p2=p;
printf("after change:a=%d b=%d\n",a,b);
return 0;
}//可成功运行


二.不创建临时变量

1.利用变量的加减乘除

#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
printf("before change:a=%d  b=%d\n",a,b);
a=a+b;
b=a-b;
a=a-b;
printf("after change:a=%d  b=%d\n",a,b);
return 0;
}//可成功运行,同理可使用减法<span style="color:#ff0000;">{a=a-b;b=a+b;a=b-a;}</span>

加减法存在漏洞:1,当数字很大时会出现溢出;2.它适合交换整型和浮点型数值变量,当用于交换浮点数时可能会出现精度损失。

乘除法存在漏洞:除了加减法中可能出现的问题外还.必需避免a或b等于0的状况。

2.利用位运算实现

不创建临时变量,交换两变量内容

#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
printf("before change:a=%d  b=%d\n",a,b);
a = a^b;
b = a^b;
a = a^b;
printf("after change:a=%d  b=%d\n",a,b);
return 0;
}

^   异或位运算符;

eg:a=3;b=5;

    a=0011

    b=0101

a^b=0110     //由此可得,根据ab可得出a^b,根据a^b和a可得出b,根据a^b和b可得出a
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言
相关文章推荐