设为首页 加入收藏

TOP

关于函数的一些重要点
2012-11-13 12:41:43 来源: 作者: 【 】 浏览:365
Tags:关于 函数 一些 要点
    return语句的形式: return z;return(z),当z的类型与类型与函数定义的返回值类型不一致时,按赋值规则处理。即先将z值转变成对应的数据类型。
   
    函数的调用的注意事项:
   
    1 函数定义的指定的形参,未出现函数调用时,他们并不占内存。在发生调用时,临时分配的内存单元。
   
    2 调用过程中,实参单元仍保留并维持原值,没有改变。
   
    3 函数声明很重要。
   
    4 函数的嵌套调用:
   
    函数
   
    int  max4(int a ,int b,int c,int d)
   
    {
   
    int max2(int a,int b);
   
    m=max2(a,b);
   
    }
   
    结论:主调函数的参数名和类型可以与被调函数完全一样。
   
    5数组作为函数参数:
   
    数组元素作为实参时,向形参变量传递的是数据元素的值,
   
    数组名作为实参和形参,传递的是数组的第一个元素的地址。
   
    例子:
   
    #include<stdio.h>
   
    float aver(float a )//这是形参数组名
   
    {
   
    int i;
   
    float av,s=a[0];
   
    for(i=1;i<5;i++)
   
    s=s+a[i];
   
    av=s/5;
   
    return av;
   
    }
   
    void main()
   
    {
   
    float sco ,av;
   
    int i;
   
    printf(“\ninput 5 scores:\n”);
   
    for(i=0;i<5;i++)
   
    scanf(“%f”,&sco[i]);
   
    av=aver(sco); //实参数组名。
   
    printf(“average score is %5.2f”,av);
   
    }
   
    a.  形参数组和实参数组的类型必须一致,否则将引起错误。
   
    b.  函数aver定义时,声明数组的大小为5.但实际上,指定其大小是不起任何作用的。因为C编译系统并不检查形参数组的大小。只是将实参数组的首地址传给形参数组名。数组名就是一个指针,sco[n]和a[n]指定的是同一单元。
   
    当形参数组的长度与实参数组不一致时,虽不至于出现语法错误(编译能通过),但程序执行结果将与实际不符,这是应予以注意的。
   
    void nzp(int a )
   
    {
   
    int i;
   
    printf(“\nvalues of array aare:\n”);
   
    for(i=0;i<8;i++)
   
    {
   
    if(a[i]<0)a[i]=0;
   
    printf(“%d ”,a[i]);
   
    }
   
    }
   
    main()
   
    {
   
    int b ,i;
   
    printf(“\ninput 5 numbers:\n”);
   
    for(i=0;i<5;i++)
   
    scanf(“%d”,&b[i]);
   
    printf(“initial values of array b are:\n”);
   
    for(i=0;i<5;i++)
   
    printf(“%d ”,b[i]);
   
    nzp(b);
   
    printf(“\nlast values of array b are:\n”);
   
    for(i=0;i<5;i++)
   
    printf(“%d ”,b[i]);
   
    }
   
    本程序与例 8.9 程序比,nzp 函数的形参数组长度改为 8,函数体中,for 语句的循环件也改为 i<8.因此,形参数组 a和实参数组 b 的长度不一致。编译能够通过,但从结果看,数组 a的元素 a ,a ,a 显然是无意义的。
   
    在函数形参表中,允许不给出形参数组的长度,或用一个变量来表示数组元素的个数。
   
    例如,可以写为:
   
    void nzp(int a[])
   
    或写为
   
    void nzp(int a[],int n) 但是不能写成void nzq(int a ),因为那样就是int形的a变量。
   
    其中形参数组 a 没有给出长度,而由 n 值动态地表示数组的长度。n 的值由主
   
    调函数的实参进行传送。
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇整形数据的存储 下一篇变量的存储方式与生存期

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: