• 网络学院
  • IT资讯
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
预防程序与TurboC常见错误解析(2)
  站点:
  • 首 页
  • 最新软件
  • 文章教程
  • 国内软件
  • 国外软件
  • 绿色软件
  • 源码下载
  • 字体下载
预防程序与TurboC常见错误解析(2)
软件发布 预防程序与TurboC常见错误解析(2)
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件 绿软下载
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回文章教程首页 >> 文章首页 >> 认证考试 >> 计算机等级考试 >> 计算机等级考试动态 >> 预防程序与TurboC常见错误解析(2)

预防程序与TurboC常见错误解析(2)

添加时间: 2007-5-7 4:11:19  作者: 计算机等级考试认证参考  阅读次数:28   来源: http://www.d9soft.com

       

    2.2 函数参数传递
    一、调用函数向被调用函数以形式参数传递
    用户编写的函数一般在对其说明和定义时就规定了形式参数类型, 因此调用这些函数时参量必须与子函数中形式参数的数据类型、顺序和数量完全相同, 否则在调用中将会出错, 得到意想不到的结果。
    注意:
    当数组作为形式参数向被调用函数传递时, 只传递数组的地址, 而不是将整个数组元素都复制到函数中去, 即用数组名作为实参调用子函数, 调用时指向该数组第一个元素的指针就被传递给子函数。因为在Turbo C2.0中, 没有下标的数组名就是一个指向该数组第一个元素的指针。当然数组变量的类型在两个函数中必须相同。
    用下述方法传递数组形参。
    例2:
     #include
     void disp(int *n);
     int main()
     {
          int m[10], i;
          for(i=0; i<10; i++)
            m[i]=i;
          disp(m);       /*按指针方式传递数组*/
          getch();
          return 0;
     }
     void disp(int *n)
     {
          int j;
          for(j=0; j<10; j++)
            printf("=", *(n++));
          printf(" ");
     }
    另外, 当传递数组的某个元素时, 数组元素作为实参, 此时按使用其它简单变量的方法使用数组元素。例2按传递数组元素的方法传递时变为:
     #include
     void disp(int n);
     int main()
     {
          int m[10], i;
          for(i=0; i<10; i++){
            m[i]=i;
            disp(m[i]);  /*逐个传递数组元素*/
          }
          getch();
          return 0;
     }
     void disp(int n)
     {
          printf("= ");

     }
这时一次只传递了数组的一个元素。

    二、被调用函数向调用函数返回值

    一般使用return语句由被调用函数向调用函数返回值, 该语句有下列用途:
    1. 它能立即从所在的函数中退出, 返回到调用它的程序中去。
    2. 返回一个值给调用它的函数。
    有两种方法可以终止子函数运行并返回到调用它的函数中: 一是执行到函数的最后一条语句后返回; 一是执行到语句return时返回。前者当子函数执行完后仅返回给调用函数一个0。若要返回一个值, 就必须用return语句。只需在return 语句中指定返回的值即可。例1返回最大值时变为:
     例3:
     #include
     int maxmum(int x, int y, int z);   /*说明一个用户自定义函数*/
     int main()
     {
          int i, j, k, max;
          printf("i, j, k=? ");
          scanf("MMM", &i, &j, &k);
          max=maxmum(i, j, k);     /*调用子函数, 并将返回值赋给max*/
          printf("The maxmum value is %d ", max);
          getch();
          return 0;
     }

     maxmum(int x, int y, int z)
     {
          int max;
          max=x>y?x:y;        /*求最大值*/
          max=max>z?max:z;
          return(max);        /*返回最大值*/
     }
    return语句可以向调用函数返回值, 但这种方法只能返回一个参数, 在许多情况下要返回多个参数, 这是用return语句就不能满足要求。Turob C2.0提供了另一种参数传递的方法, 就是调用函数向被调用函数传递的形式参数不是传递变量本身,而是传递变量的地址, 当子函数中向相应的地址写入不同的数值之后, 也就改变了调用函数中相应变量的值, 从而达到了返回多个变量的目的。
     例4:
     #include
     void subfun(int *m, int *n);  /*说明子函数*/
     int main()
     {
          int i, j;
          printf("i, j=? ");
          scanf("%d, %d", &i, &j); /*从键盘输入2个整数*/

       printf("In main before calling "/*输出此2数及其乘积*/
                 "i=%-4d j=%-4d i*j=%-4d ", i, j, i*j);
          subfun(&i, &j);          /*以传送地址的方式调用子函数*/
          printf("In main after calling "/*调用子函数后输出变量值*/
                 "i=%-4d j=%-4d i*j=%-4d ", i, j, i*j);
          getch();
          return 0;
     }
     void subfun(int *m, int *n)
     {
          *m=*m+2;
          *j=*i-*j;
          printf("In subfun after calling " /*子函数中输出变量值*/
                 "i=%-4d j=%-4d i*j=%-4d ", *i, *j, *i**j);
      }

    上例中, *i**j表示指针i和j所指的两个整型数*i和*j之乘积。
    另外, return语句也可以返回一个指针, 举例如下。
    下例中先等待输入一字符串, 再等待输入要查找的字符, 然后调用match() 函数在字符串中查找该字符。若有相同字符, 则返回一个指向该字符串中这一位置的指针, 如果没有找到, 则返回一个空(NULL)指针。
    例5:
     #include
     char *match(char c, char *s);
     int main()
     {
          char s[40], c, *str;
          str=malloc(40);          /*为字符串指什分配内存空间*/
          printf("Please input character string:");
          gets(s);                 /*键盘输入字符串*/
          printf("Please input one character:");
          c=getche();              /*键盘输入字符*/

 

上下文章:

 

上一篇文章: 计算机等级考试入门:如何进入编程环境 下一篇文章: 局域网组建十大要点(6)

相关文章:

  • Vista下光盘刻录Nero 8常见问题
  • Sendmail 554 错误的解决
  • AV杀手变种强行关闭杀度软件与下载恶意程序
  • [Oracle]Oracle10g闪回恢复区详细解析
  • 常见问题诊断方法---(常见错误篇)

相关软件:

  • FTP远程文件同步更新程序 1.0.0.0
  • 关闭有害木马端口程序
  • DOS万能驱动合集 (含有常见所有驱动)
  • 终极程序加密器 2.98
  • UC263成人视频小电影程序
  • TurboCAD 2D V6.5 LT

 

快速导航

  • 网络学院
  • 精品汇聚
  • 字体下载
  • 教程下载
  • ASP源码
  • PHP源码
  • Net源码
  • JSP 源码

计算机等级考试分类导航

  • 计算机等级考试动态
  • 计算机一级考试
  • 计算机二级考试
  • 计算机三级考试
  • 计算机四级考试

本类经典文章推荐

  • 全国计算机等级考试三级网络技术(...
  • 三级网络技术复习笔记(第1-2章)
  • 三级笔试样题(PC技术)
  • 三级数据库技术样题
  • 三级网络技术复习笔记(5-7)
  • 三级网络技术复习笔记(第3-4章)
  • 笔试样题(网络技术)
  • 机考如何避免范围性错误
  • 2003年最新三级网络模拟题(2)
  • 全国计算机等级考试三级网络技术部...

计算机等级考试动态阅读排行

  • 计算机等级考试:VFp练习题1
  • 全国计算机等级考试三级网络技术(...
  • 完整的计算机等级考试上机模拟系统
  • 计算机等级考试:VFp练习题2
  • 历年操作系统论述题及答案(2)
  • 三级网络技术复习笔记(第1-2章)
  • 上海:计算机等级考试开始报名
  • 计算机二级VB软件环境、考试时间、...
  • 2005年全国计算机等级考试全真模拟...
  • 职称计算机考试报名今年最后一次

计算机等级考试阅读总排行

  • 全国计算机等级考试一级模拟试题01
  • 全国计算机等级考试一级模拟试题10
  • 全国计算机等级考试一级模拟试题08
  • 全国计算机等级考试一级考试最新模...
  • 全国计算机等级考试一级模拟试题07
  • 全国计算机等级考试一级模拟试题02
  • 全国计算机等级考试一级模拟试题06
  • 全国计算机等级考试一级模拟试题03
  • 一级(WINDOWS)试题解析-Word篇
  • 全国计算机等级考试上机考试应试技...

广告位置

字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

copyright; 2005-2008 D9soft.com 第九软件网 版权所有