C语言基础教程(五)函数(5)

  •   2009-07-10/10:21
  •   二、被调用函数向调用函数返回值
    一般使用return语句由被调用函数向调用函数返回值,该语句有下列用途:
    1.它能立即从所在的函数中退出, 返回到调用它的程序中去。
    2.返回一个值给调用它的函数。
    有两种方法可以终止子函数运行并返回到调用它的函数中: 一是执行到函数的最后一条语句后返回;一是执行到语句return时返回。前者当子函数执行完后仅返回给调用函数一个0。若要返回一个值,就必须用return语句。只需在return 语句中指定返回的值即可。例1返回最大值时变为:
    例3:
    #include<stdio.h>
    int maxmum(int x, int y, int z); /*说明一个用户自定义函数*/
    int main()
    {
    int i, j, k, max;
    printf("i, j, k=?\n");
    scanf("%4d%4d%4d", &i, &j, &k);
    max=maxmum(i, j, k); /*调用子函数, 并将返回值赋给max*/
    printf("The maxmum value is %d\n", 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<stdio.h>
    void subfun(int *m, int *n); /*说明子函数*/
    int main()
    {
    int i, j;
    printf("i, j=?\n");
    scanf("%d, %d", &i, &j); /*从键盘输入2个整数*/
    printf("In main before calling\n"/*输出此2数及其乘积*/
    "i=%-4d j=%-4d i*j=%-4d\n", i, j, i*j);
    subfun(&i, &j); /*以传送地址的方式调用子函数*/
    printf("In main after calling\n"/*调用子函数后输出变量值*/
    "i=%-4d j=%-4d i*j=%-4d\n", i, j, i*j);
    getch();
    return 0;
    }
    void subfun(int *m, int *n)
    {
    *m=*m+2;
    *j=*i-*j;
    printf("In subfun after calling\n" /*子函数中输出变量值*/
    "i=%-4d j=%-4d i*j=%-4d\n", *i, *j, *i**j);
    }


    上例中,*i**j表示指针i和j所指的两个整型数*i和*j之乘积。
    另外,return语句也可以返回一个指针,举例如下。
    下例中先等待输入一字符串,再等待输入要查找的字符,然后调用match()函数在字符串中查找该字符。若有相同字符,则返回一个指向该字符串中这一位置的指针,如果没有找到,则返回一个空(NULL)指针。
    例5:
    #include<stdio.h>
    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(); /*键盘输入字符*/
    str=match(c, s); /*调用子函数*/
    putchar('\n');
    puts(str); /*输出子函数返回的指针所指的字符串*/
    getch();
    return 0;
    }
    char *match(char c, char *s)
    {
    int i=0;
    while(c!=s[i]&&s[i]!='\n')/*找字符串中指定的字符*/
    i++;
    return(&s[i]); /*返回所找字符的地址*/


    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多