Chinaunix首页 | 论坛 | 博客
  • 博客访问: 124581
  • 博文数量: 52
  • 博客积分: 2200
  • 博客等级: 大尉
  • 技术积分: 580
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-08 15:00
文章分类

全部博文(52)

文章存档

2011年(1)

2009年(51)

我的朋友

分类:

2009-10-08 16:21:53

/*=============================================================
                 以指针变量作为函数形参,实现两个值的互换
                 算法:通过函数实现两个指针变量的互换
==============================================================
             作者:最后的村长
             时间:2009年10月4日
             工具:DEV C++
             version:1.0
==============================================================*/
#include
#include
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的值赋给一个整形变量。
 }
*/
阅读(6574) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~