Chinaunix首页 | 论坛 | 博客
  • 博客访问: 167228
  • 博文数量: 33
  • 博客积分: 731
  • 博客等级: 上士
  • 技术积分: 757
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-02 22:51
文章存档

2018年(1)

2017年(2)

2013年(1)

2012年(29)

我的朋友

分类: C/C++

2012-09-27 16:38:05

/* Note:Your choice is C IDE */
/*通过函数调用指针变量就可以返回全部数值*/
#include "stdio.h"
void main()
{
while(1)
{
void swap(int *poniter_1,int *poniter_2);
    int a,b;
    int *p1,*p2;
     p1=&a;
     p2=&b;
    printf("a=");
           scanf("%d",p1);
                 printf("b=");
                 scanf("%d",p2);
    if(a>b)
    {
    printf("max=%d\nmin=%d\n",*p1,*p2);
    printf("max val is a,min val is b。\n");
    }
          else
    {
    swap(p1,p2);
    printf("max=%d\nmin=%d\n",*p1,*p2);
    printf("max val is b,min val is b。\n");
          }
}
}
void swap(int *pointer_1,int *pointer_2)
{
int tmp;
tmp=*poniter_1;
  *pointer_1=*pointer_2;
*pointer_2=tmp;
}
解释:
函数swap(int *p1,int *p2)的形参是int *型——整型指针类型。所以main函数调用swap(int *p1,int *p2)的时候,带入的实参必须是整型类型指针变量。由于前面在使用前定义了p1,p2是指针类型数据,所以不会出错。
其实这个函数说明的是调用的子函数的形参和实参必须是同类型的数据类型,很多时候我们都会忽略掉这一点,所以必须引起注意。
过程分析:
函数调用的时候,将实参变量的那个数值传送给形参变量,同时就这一点也可以证明上面的“子函数的实参和形参是必须是同类型的数据,或者进行强制类型转换也可”。继续———采取的是“值传递”方式,因此虚实结合,形参p1的值为&a,p2的值为&b;不管是形参pointer_1还是实参p1,这时都是指向了变量a,不管是形参pointer_2还是实参p2,这时都是指向了变量b;接着执行swap函数体,使*poniter_2和*poniter_1的数值互换,函数调用后,形参被释放。
这里利用指针变量作为子函数的形参,可以有一个很大的好处,如果按一般的思路来想,一个函数最多能够返回的数值只有一个值——return n;但是利用指针变量作为函数形参,最终不用返回值,因为调用了子函数之后,形参被释放,但是实参的实际已经改变了。主调函数就能够通过子函数的地址交换之后的地址值寻找到目的结果。这就是指针变量作为子函数的形参的一个最大的好处。

注意::
不能企图通过改变指针形参的值而使指针实参的值改变。




阅读(791) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~