程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言基礎教程(五)函數(5)

C語言基礎教程(五)函數(5)

編輯:關於C語言

二、被調用函數向調用函數返回值
一般使用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]); /*返回所找字符的地址*/
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved