zoukankan      html  css  js  c++  java
  • C措辞教程第五章:函数(3)



    二、函数的值

      函数的值是指函数被调用之后, 施行函数体中的轨范段所得到的并前往给主调函数的值。如调用正弦函数得到正弦值,调用例5.1的max函数得到的最年夜数等。对函数的值(或称函数前往值)有以下一些分析:

    1. 函数的值只能经过历程return语句前往主调函数。return 语句的一样日常寻常形式为:
    return 表达式;
    也许为:
    return (表达式);
    该语句的效用是策画表达式的值,并前往给主调函数。 在函数中应许有多个return语句,但每次调用只能有一个return 语句被施行, 因而只能前往一个函数值。

    2. 函数值的范例和函数界说中函数的范例应对峙分好比。 如果两者不分好比,则以函数范例为准,自动截至范例转换。

    3. 如函数值为整型,在函数界说时可以省去范例分析。

    4. 不前往函数值的函数,可以了然界说为“空范例”, 范例分析符为“void”。如例5.3中函数s并不向主函数返函数值,因而可界说为:
    void s(int n)
    { ……
    }

      一旦函数被界说为空范例后, 就不克不及在主调函数中运用被调函数的函数值了。比方,在界说s为空范例后,在主函数中写下述语句 sum=s(n); 就是错误的。为了使轨范有出色的可读性并减少出错, 凡不要求前往值的函数都应界说为空范例。函数分析在主调函数中调用某函数之前应对该被调函数截至分析, 这与运用变量之前要进步前辈行变量分析是一样的。 在主调函数中对被调函数作分析的目标是使编译零碎晓得被调函数前往值的范例, 以便在主调函数中按此品种型对前往值作相应的处置。 对被调函数的分析也有两种样式,一种为传统样式,其一样日常寻常样式为: 范例分析符 被调函数名(); 这种样式只给出函数前往值的范例,被调函数名及一个空括号。

      这种样式由于在括号中没有任何参数信息, 因而方便于编译零碎截至错误反省,易于产生错误。另一种为今世样式,其一样日常寻常形式为:
    范例分析符 被调函数名(范例 形参,范例 形参…);
    或为:
    范例分析符 被调函数名(范例,范例…);
      今世样式的括号内给出了形参的范例和形参名, 或只给出形参范例。这便于编译零碎截至检错,以进攻可以泛起的错误。例5.1 main函数中对max函数的分析若
    用传统样式可写为:
    int max();
    用今世样式可写为:
    int max(int a,int b);
    或写为:
    int max(int,int);
      C措辞中又法则在以下几种景遇时可以省去主调函数中对被调函数的函数分析。
    1. 如果被调函数的前往值是整型或字符型时, 可以舛错被调函数作分析,而直接调用。这时零碎把自动对被调函数前往值按整型处置。例5.3的主函数中未对函数s作分析而直接调用即属此种景遇。

    2. 当被调函数的函数界说出目下当今主调函数之前时, 在主调函数中也可以舛错被调函数再作分析而直接调用。比方例5.1中, 函数max的界说放在main 函数之前,因而可在main函数中省去对 max函数的函数分析int max(int a,int b)。

    3. 如在一切函数界说之前, 在函数外事后分析了各个函数的范例,则在以后的各主调函数中,可不再对被调函数作分析。比方:
    char str(int a);
    float f(float b);
    main()
    {
    ……
    }
    char str(int a)
    {
    ……
    }
    float f(float b)
    {
    ……
    }
    个中第一,二行对str函数和f函数事后作了分析。 因而在以后各函数中无须对str和f函数再作分析就可直接调用。

    4. 对库函数的调用不需要再作分析, 但必需把该函数的头文件用include命令包括在源文件前部。数组作为函数参数数组可以作为函数的参数运用,截至数据传送。 数组用作函数参数有两种形式,一种是把数组元素(下标变量)作为实参运用; 另一种是把数组名作为函数的形参和实参运用。一、数组元素作函数实参数组元素就是下标变量,它与普通变量并无区别。 因而它作为函数实参运用与普通变量是完全相同的,在产生函数调用时, 把作为实参的数组元素的值传送给形参,完成单向的值传送。例5.4分析了这种景遇。[例5.4]鉴别一个整数数组中各元素的值,若年夜于0 则输入该值,若小于即是0则输入0值。编程如下:
    void nzp(int v)
    {
    if(v>0)
    printf("%d ",v);
    else
    printf("%d ",0);
    }
    main()
    {
    int a[5],i;
    printf("input 5 numbers\n");
    for(i=0;i<5;i )
    {
    scanf("%d",&a[i]);
    nzp(a[i]);
    }
    }void nzp(int v)
    { ……
    }
    main()
    {
    int a[5],i;
    printf("input 5 numbers\n");
    for(i=0;i<5;i )
    { scanf("%d",&a[i]);
    nzp(a[i]);
    }
    }
      本轨范中首先界说一个无前往值函数nzp,并分析其形参v 为整型变量。在函数体中依据v值输入相应的效果。在main函数顶用一个for 语句输入数组各元素, 每输入一个就以该元素作实参调用一次nzp函数,即把a[i]的值传送给形参v,供nzp函数运用。




    版权声明: 原创作品,应许转载,转载时请务必以超链接形式标明文章 原始情由 、作者信息和本声明。否则将究查法令责任。

  • 相关阅读:
    oracle恢复被覆盖的存储过程
    POJ 2478 Farey Sequence
    java不求有功,但求无过—异常处理
    图论-树的最大路
    MP3的频率、比特率、码率与音质的关系
    基于Lucene3.5.0怎样从TokenStream获得Token
    Groovy新手教程
    Binder机制1---Binder原理介绍
    UVA
    Hibernate Criterion
  • 原文地址:https://www.cnblogs.com/zgqjymx/p/1975602.html
Copyright © 2011-2022 走看看