区分改变变量的值or改变指针的指向(地址)
例题:输入a和b两个整数,按先大后小的顺序输出a和b
方法一:并未交换a,b的值,只是交换了p1,p2的值(即交换了p1,p2所指向的地址==交换了a,b的地址)
#include<stdio.h> //方法一
int main()
{
int *p1,*p2,a,b;
int *tmp;//区分对比tmp是否是指针类型
scanf("%d %d",&a,&b);
p1=&a;
p2=&b;
if(a<b)
{
tmp=p1;//并未交换a,b的值,只是交换了p1,p2的值(即交换了p1,p2所指向的地址==交换了a,b的地址)
p1=p2;
p2=tmp;
}
printf("a=%d,b=%d\n",a,b);
printf("*p1=%d,*p2=%d\n",*p1,*p2);
return 0;
}
输入:3 5
运行结果如图:
方法二:交换了a,b的值
#include<stdio.h> //方法二
int main()
{
int *p1,*p2,a,b;
int tmp;//区分对比tmp是否是指针类型
scanf("%d %d",&a,&b);
p1=&a;
p2=&b;
if(a<b)
{
tmp=*p1; //交换了a,b的值
*p1=*p2;
*p2=tmp;
}
printf("a=%d,b=%d\n",a,b);
printf("*p1=%d,*p2=%d\n",*p1,*p2);
return 0;
}
输入:3 5
运行结果如图: