交换a,b两个变量的值,顾名思义,就是将b的值赋给a,之后再将a的值赋予b,那么问题就出现了,将b的值赋予a时b的值已经发生了变化。这时就要定义一个中间变量来存放b的值,利用中间变量来进行交换。
int main()
{
int old_num = 0;
int new_num = 0;
int item = 0;
printf("输入两个数:");
scanf("%d %d",&old_num, &new_num);
item = old_num; //利用中间变量来进行交换;
old_num = new_num;
new_num = item;
printf("交换之后:%d %d", old_num, new_num);
system("pause");
return 0;
}
也可以利用地址的访问进行交换。什么是变量的定义:所谓的定义就是(编译器)创建一个对象,为这个对象分配一块内存并给它取上一个名字,这个名字就是我们经常说的变量名。这个方法就是利用指针找到变量的地址并访问变量所在内存进行两值的交换,还需要创建一个中间变量来存放其中一个变量的值。就好比有两瓶醋a,b,将他们瓶中的液体进行交换,这时候就需要一个空瓶子c来充当中间变量,第一步,将其中一瓶醋a倒入空瓶c中;第二步,将瓶子b中的醋倒入a中;第三步,将c中的醋倒入b中;这样就大功告成了。
int main()
{
int old_num = 0;
int new_num = 0;
int item = 0;
int *p1 = &old_num;
int *p2 = &new_num;
printf("输入两个数:");
scanf("%d %d",&old_num, &new_num);
item = *p1;
*p1 =*p2;
*p2 = item;
printf("交换之后:%d %d", old_num, new_num);
system("pause");
return 0;
}
上面两种方法都需要申请一个中间变量,那么有没有不需要申请中间变量就可以交换两个整形变量的值呢?
方法一:
int main()
{
int a = 5;
int b = 8;
printf("交换之前:a=%d b=%d \n", a, b);
a = a - b; //a = -3
b = b + a; //b = 5;
a = b - a; //a = 8;
printf("交换之后:a=%d b=%d", a, b);
system("pause");
return 0;
}
方法二:异或法
int main()
{
int a = -1;
int b = -5;
printf("交换之前:a=%d b=%d \n", a, b);
a = a^b;
b = a^b; //a^b^b=a^(b^b)=a^0=a;
a = a^b; //a^a^b=0^b=b;
printf("交换之后:a=%d b=%d", a, b);
system("pause");
return 0;
}