以指针变量作为函数形参,实现两个值的互换

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的值赋给一个整形变量。
}
*/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值