上一题下一题
跳转到
 
 
  世界如此多姿,发展如此迅速,窥一斑未必还能知全豹。但正如万花筒一样,每一个管窥都色彩斑斓。  
 
 
  知识通道 | 学习首页 | 教师首页 | PK首页 | 知识创造首页 | 企业首页 | 登录
 
本文对应知识领域
指针变量作为函数参数
作者:未知 申领版权
2012年01月24日 共有 1745 次访问 【添加到收藏夹】 【我要附加题目
受欢迎度:

 

指针变量作为函数参数

函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中。
    【例10.3】题目同例10.2,即输入的两个整数按大小顺序输出。今用函数处理,而且用指针类型的数据作函数参数。
    swap(int *p1,int *p2)
    {int temp;
    temp=*p1;
    *p1=*p2;
    *p2=temp;
    }
    main()
    { 
    int a,b;
    int *pointer_1,*pointer_2;
    scanf("%d,%d",&a,&b);
    pointer_1=&a;pointer_2=&b;
    if(a
    printf("\n%d,%d\n",a,b);
    }
    
    对程序的说明:
    swap是用户定义的函数,它的作用是交换两个变量(a和b)的值。swap函数的形参p1、p2是指针变量。程序运行时,先执行main函数,输入a和b的值。然后将a和b的地址分别赋给指针变量pointer_1和pointer_2,使pointer_1指向a,pointer_2指向b。
    
    接着执行if语句,由于a〈b,因此执行swap函数。注意实参pointer_1和pointer_2是指针变量,在函数调用时,将实参变量的值传递给形参变量。采取的依然是“值传递”方式。因此虚实结合后形参p1的值为&a,p2的值为&b。这时p1和pointer_1指向变量a,p2和pointer_2指向变量b。
    
    接着执行执行swap函数的函数体使*p1和*p2的值互换,也就是使a和b的值互换。
    
    函数调用结束后,p1和p2不复存在(已释放)如图。
    
    最后在main函数中输出的a和b的值是已经过交换的值。
    请注意交换*p1和*p2的值是如何实现的。请找出下列程序段的错误:
    swap(int *p1,int *p2)
    {int *temp;
    *temp=*p1;      /*此语句有问题*/
    *p1=*p2;
    *p2=temp;
    }
    请考虑下面的函数能否实现实现a和b互换。
    swap(int x,int y)
    {int temp;
    temp=x;
    x=y;
    y=temp;
    }
    如果在main函数中用“swap(a,b);”调用swap函数,会有什么结果呢?请看下图所示。
    
    【例10.4】请注意,不能企图通过改变指针形参的值而使指针实参的值改变。
    swap(int *p1,int *p2)
    {int *p;
    p=p1;
    p1=p2;
    p2=p;
    }
    main()
    { 
    int a,b;
    int *pointer_1,*pointer_2;
    scanf("%d,%d",&a,&b);
    pointer_1=&a;pointer_2=&b;
    if(a
    printf("\n%d,%d\n",*pointer_1,*pointer_2);
    }
    
    其中的问题在于不能实现如图所示的第四步(d)。
    
    【例10.5】输入a、b、c3个整数,按大小顺序输出。
    swap(int *pt1,int *pt2)
    {int temp;
    temp=*pt1;
    *pt1=*pt2;
    *pt2=temp;
    }
    exchange(int *q1,int *q2,int *q3)
    { if(*q1<*q2)swap(q1,q2);
    if(*q1<*q3)swap(q1,q3);
    if(*q2<*q3)swap(q2,q3);
    }
    main()
    { 
    int a,b,c,*p1,*p2,*p3;
    scanf("%d,%d,%d",&a,&b,&c);
    p1=&a;p2=&b; p3=&c;
    exchange(p1,p2,p3);
    printf("\n%d,%d,%d \n",a,b,c);
    }
    

 

相关新闻

产量数据处理的四个步骤
测量数据计算方法二
看懂了这些就等于MBA商学院毕业
《大学及其作用》
大学及其作用
人民币FDI全面铺开一石三鸟
恒山(一)
珠穆朗玛峰(三)
实验基本操作中的数据
石油化学工业

您可能对这些感兴趣  

第7讲 综合分析BIM在运用与推广中的障碍问题
考核学生质量的困难
日本福岛核电站事故初步分析
论科技异化与科技人化
中国科技计划项目管理现状与对策
财政科技资金的审计重点和内容
软科学研究机构在政府决策中的功效、困境及对策研究
打造超级DOS系统(下)
DOS命令基础应用(6)
打造超级DOS系统(上)

题目筛选器
日期:
类型:
状态:
得分: <=
分类:
作者:
职业:
关键字:
搜索

 
 
 
  焦点事件
 
  知识体系
 
  职业列表
 
 
  最热文章
 
 
  最多引用文章
 
 
  最新文章
 
 
 
 
网站介绍 | 广告服务 | 招聘信息 | 保护隐私权 | 免责条款 | 法律顾问 | 意见反馈
版权所有 不得转载
沪ICP备 10203777 号 联系电话:021-54428255
  帮助提示    
《我的太学》是一种全新的应用,您在操作中遇到疑问或者问题,请拨打电话13564659895,15921448526。
《我的太学》