方法一:
通过中间变量t直接交换。
c
#include<stdio.h>
//方法一
int main()
{
int a,b,t;
printf("请输入a和b的值:\n");
scanf("%d %d",&a,&b);
printf("交换前:a=%d,b=%d\n",a,b);
t=a;
a=b;
b=t;
printf("交换后:a=%d,b=%d\n",a,b);
}
方法二:
利用指针,将两个指针指向的变量的值进行交换,只改变内存单元的值,不改变指针指向的内存单元。
c
#include<stdio.h>
//方法二
int main()
{
int a,b,t;
int *p1=&a,*p2=&b;
printf("请输入a和b的值:\n");
scanf("%d %d",p1,p2);
printf("交换前:a=%d,b=%d\n",*p1,*p2);
printf("交换前:p1=%d,p2=%d\n",p1,p2);
t=*p1;
*p1=*p2;
*p2=t;
printf("交换后:a=%d,b=%d\n",*p1,*p2);
printf("交换后:p1=%d,p2=%d\n",p1,p2);
return 0;
}
方法三:
利用指针,改变两个指针的指向,如原p1指向a,p2指向b,现在p1指向b,p2指向a。
c
#include<stdio.h>
//方法三
int main()
{
int a,b;
int *p1=&a,*p2=&b,*p;
printf("请输入a和b的值:\n");
scanf("%d %d",p1,p2);
printf("交换前:a=%d,b=%d\n",*p1,*p2);
printf("交换前:p1=%d,p2=%d\n",p1,p2);
p=p1;
p1=p2;
p2=p;
printf("交换后:a=%d,b=%d\n",*p1,*p2);
printf("交换后:p1=%d,p2=%d\n",p1,p2);
return 0;
}
注意和方法二对比p1 p2的变化。
方法四:
写一个交换的子函数(同样利用指针),本质仍然是交换内存单元的值,但注意调用函数的实参应该用地址,因为被调用函数的形参是指针变量,指针就是地址,所以实参也必须是地址。
c
#include<stdio.h>
//方法四
int swap(int *x,int *y)
{
int t;
t=*x;
*x=*y;
*y=t;
}
int main()
{
int a,b;
printf("请输入a和b的值:\n");
scanf("%d %d",&a,&b);
printf("交换前:a=%d,b=%d\n",a,b);
swap(&a,&b);
printf("交换后:a=%d,b=%d\n",a,b);
return 0;
}