http://blog.pfan.cn/cunzhang/48985.html
/*=============================================================
以指针变量作为函数形参,实现两个值的互换
算法:通过函数实现两个指针变量的互换
==============================================================
作者:最后的村长
时间:2009年10月4日
工具:DEV C++
version:1.0
==============================================================*/
#include <stdio.h>
#include <stdlib.h>
void exchange(int *p1,int *p2);
/*=============================================================*/
int main()
{
int a,b;//定义两个整形变量
int *p1,*p2;//定义两个执行整形变量的指针变量
puts("请输出两个整数,以逗号间隔");//输入两个整形变量的值
scanf("%d,%d",&a,&b);
printf("a=%d,b=%d",a,b);//输出两个整形变量的值到屏幕
p1=&a;p2=&b;//初始化两个整形变量
printf("\n两个指针原来指向的变量为:%d,%d",*p1,*p2);
printf("\np1指向的地址为:%d,p2指向的地址为:%d",p1,p2);
if(*p1<*p2)
exchange(p1,p2);//以指针作为实参传递
printf("\n两个数由大到小输出:%d,%d",*p1,*p2);
printf("\na=%d,b=%d",a,b);
printf("\np1指向的地址为:%d,p2指向的地址为:%d",p1,p2);
system("PAUSE");
return 0;
}
void exchange(int *p1,int *p2)//函数中通过定义整形变量p来改变实参传递来的
//指针变量指向变量,在函数中实参指针变量的值没有发生变化,
//而指针变量所指向的内容发生了变化,也就是在函数中实现了a和b数值的调换
{
int p;
p=*p1;
*p1=*p2;
*p2=p;
}
//函数中将a和b的值对调,函数结束后这种对调还能保留????
/*exchange函数区别于以下两种写法:
写法一:
void exchange(int *p1,int *p2)
{
int *p;
p=p1;p1=p2;p2=p;
}
这种写法在函数中改变了两个指针变量形参的数值,但是没有将改变后的数值传递回main函数,因此,main函数中
不会发生变化。
写法二:
void exchange(int *p1,int *p2)
{
int *p;
*p=p1;*p1=*p2;*p2=*p;
}
*p代表p所指向的变量,但是p并没有确定的地址值,所以它的值也就不可预见,*p指向的单元也是不可预见的,因此对*
对*p赋值可会破坏系统正常工作状况。应该是将*p1的值赋给一个整形变量。
}
*/