?? 王大剛--c語言編程寶典--函數.htm
字號:
<BR> int m[10], i;
<BR> for(i=0;
i<10; i++)
<BR>
m[i]=i; <BR>
disp(m); /*按指針方式傳遞數組*/
<BR> getch();
<BR> return 0;
<BR> } <BR> void disp(int
*n) <BR> {
<BR> int j;
<BR> for(j=0;
j<10; j++)
<BR>
printf("%3d", *(n++));
<BR> printf("\n");
<BR> } <BR> 另外, 當傳遞數組的某個元素時,
數組元素作為實參, 此時按使用其它簡單變 <BR>量的方法使用數組元素。例2按傳遞數組元素的方法傳遞時變為:
<BR> #include<stdio.h>
<BR> void disp(int n);
<BR> int main() <BR> {
<BR> int m[10], i;
<BR> for(i=0;
i<10; i++){
<BR>
m[i]=i;
<BR>
disp(m[i]); /*逐個傳遞數組元素*/
<BR> }
<BR> getch();
<BR> return 0;
<BR> } <BR> void disp(int
n) <BR> {
<BR>
printf("%3d\t"); <BR> } <BR>這時一次只傳遞了數組的一個元素。 <BR>
<P> 二、被調用函數向調用函數返回值 <BR>
<P> 一般使用return語句由被調用函數向調用函數返回值, 該語句有下列用途:
<BR> 1. 它能立即從所在的函數中退出, 返回到調用它的程序中去。
<BR> 2. 返回一個值給調用它的函數。 <BR>
有兩種方法可以終止子函數運行并返回到調用它的函數中: 一是執行到函數的 <BR>最后一條語句后返回;
一是執行到語句return時返回。前者當子函數執行完后僅返 <BR>回給調用函數一個0。若要返回一個值,
就必須用return語句。只需在return 語句 <BR>中指定返回的值即可。例1返回最大值時變為:
<BR> 例3: <BR>
#include<stdio.h> <BR> int maxmum(int x, int
y, int z); /*說明一個用戶自定義函數*/ <BR> int
main() <BR> {
<BR> int i, j, k,
max; <BR> printf("i,
j, k=?\n"); <BR>
scanf("%4d%4d%4d", &i, &j, &k);
<BR> max=maxmum(i,
j, k); /*調用子函數, 并將返回值賦給max*/
<BR> printf("The
maxmum value is %d\n", max);
<BR> getch();
<BR> return 0;
<BR> } <BR> <BR>
maxmum(int x, int y, int z) <BR> {
<BR> int max;
<BR>
max=x>y?x:y; /*求最大值*/
<BR>
max=max>z?max:z;
<BR>
return(max); /*返回最大值*/
<BR> } <BR> return語句可以向調用函數返回值,
但這種方法只能返回一個參數, 在許多情 <BR>況下要返回多個參數, 這是用return語句就不能滿足要求。Turob C2.0提供了另一
<BR>種參數傳遞的方法, 就是調用函數向被調用函數傳遞的形式參數不是傳遞變量本身, <BR>而是傳遞變量的地址,
當子函數中向相應的地址寫入不同的數值之后, 也就改變了 <BR>調用函數中相應變量的值, 從而達到了返回多個變量的目的。
<BR> 例4: <BR>
#include<stdio.h> <BR> void subfun(int *m,
int *n); /*說明子函數*/ <BR> int main()
<BR> {
<BR> int i, j;
<BR> printf("i,
j=?\n"); <BR>
scanf("%d, %d", &i, &j); /*從鍵盤輸入2個整數*/
<BR> printf("In main
before calling\n"/*輸出此2數及其乘積*/
<BR>
"i=%-4d j=%-4d i*j=%-4d\n", i, j, i*j);
<BR> subfun(&i,
&j);
/*以傳送地址的方式調用子函數*/
<BR> printf("In main
after calling\n"/*調用子函數后輸出變量值*/
<BR>
"i=%-4d j=%-4d i*j=%-4d\n", i, j, i*j);
<BR> getch();
<BR> return 0;
<BR> } <BR> void
subfun(int *m, int *n) <BR> {
<BR> *m=*m+2;
<BR> *j=*i-*j;
<BR> printf("In
subfun after calling\n" /*子函數中輸出變量值*/
<BR>
"i=%-4d j=%-4d i*j=%-4d\n", *i, *j, *i**j);
<BR> } <BR>
<P> 上例中, *i**j表示指針i和j所指的兩個整型數*i和*j之乘積。
<BR> 另外, return語句也可以返回一個指針, 舉例如下。 <BR>
下例中先等待輸入一字符串, 再等待輸入要查找的字符, 然后調用match() 函 <BR>數在字符串中查找該字符。若有相同字符,
則返回一個指向該字符串中這一位置的 <BR>指針, 如果沒有找到, 則返回一個空(NULL)指針。 <BR>
例5: <BR> #include<stdio.h>
<BR> char *match(char c, char *s);
<BR> int main() <BR> {
<BR> char s[40], c,
*str; <BR>
str=malloc(40);
/*為字符串指什分配內存空間*/
<BR> printf("Please
input character string:");
<BR>
gets(s);
/*鍵盤輸入字符串*/ <BR>
printf("Please input one character:");
<BR>
c=getche();
/*鍵盤輸入字符*/ <BR>
str=match(c, s); /*調用子函數*/
<BR> putchar('\n');
<BR>
puts(str);
/*輸出子函數返回的指針所指的字符串*/
<BR> getch();
<BR> return 0;
<BR> } <BR> char
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -