回 帖 发 新 帖 刷新版面

主题:调用函数与被调用函数

以下是本人在[url=http://www.cpbdqn.com]网络工程师培训[/url]时学到的:
一、调用函数向被调用函数以形式参数传递 
    用户编写的函数一般在对其说明和定义时就规定了形式参数类型, 因此调用这 
些函数时参量必须与子函数中形式参数的数据类型、顺序和数量完全相同, 否则在 
调用中将会出错, 得到意想不到的结果。 
    注意: 
    当数组作为形式参数向被调用函数传递时, 只传递数组的地址, 而不是将整个 
数组元素都复制到函数中去, 即用数组名作为实参调用子函数, 调用时指向该数组 
第一个元素的指针就被传递给子函数。因为在Turbo C2.0中, 没有下标的数组名就 
是一个指向该数组第一个元素的指针。当然数组变量的类型在两个函数中必须相同。 
    用下述方法传递数组形参。 
    例2: 
     #include<stdio.h> 
     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("%3d", *(n++)); 
          printf("\n"); 
     } 
    另外, 当传递数组的某个元素时, 数组元素作为实参, 此时按使用其它简单变 
量的方法使用数组元素。例2按传递数组元素的方法传递时变为: 
     #include<stdio.h> 
     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("%3d\t"); 
     } 
这时一次只传递了数组的一个元素。 

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

    一般使用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]);           /*返回所找字符的地址*/ 
     } 
  

回复列表 (共3个回复)

沙发

这牲口,还没被封号?

板凳

直接无视吧~~~~牲口年年有,今年特别多:)

3 楼

这个太难弄了
















signature------------------------------------We shall never have friends if we expect to find them without fault.[url=http://www.buyfreerun.com/nike-free-run-2-c-3.html]nike free run 2[/url] [url=http://www.buyfreerun.com/nike-free-run-c-2.html]nike free run[/url] [url=http://www.buyfreerun.com/nike-free-run-2-c-3.html]cheap nike free run 2[/url] [url=http://www.buyfreerun.com/nike-free-run-c-2.html]nike free run size 11[/url]

我来回复

您尚未登录,请登录后再回复。点此登录或注册