1.指针存放是是地址,所以在用指针交换两个数的时候,需要对指针进行解引用(*p)。
用指针交换两个数,需要知道p1=p2与*p1=*p2。
p1=p1是将p2的值赋值给p1.
*p1=*p2是将p2指针地址存放的值,赋值给p1指针地址存放的值,即p1地址处存放的值为*p。
2.指针实现交换两个数的值:
#include <stdio.h>
void swap(int *p1,int *p2)
{
int tmep = *p1; //保存临时值
*p1 = *p2; //让p1地址处存放的值变为*p2
*p2 = tmep; //让p2地址处存放的值变为temp,即为改变时的*p1
}
int main()
{
int a = 10;
int b = 20;
swap(&a,&b);
printf("%d %d\n",a,b);
//int *t;
//t = &a;
//*t = 5;
//printf("%d\n",a);
return 0;
}
3.运行结果:
4.总结:
在使用指针交换两个数时,需要理解,*p1=*p2是将p2指针地址存放的值,赋值给p1指针地址存放的值,即p1地址处存放的值为*p。
给指针赋值时的错误操作:int *p;*p=5;这样赋值是错误的,因为p还未被初始化指向的地址。
正确的操作:int *p,a;p=&a;*p=5;此时,p地址处存放的值为5,即a=5。