?? 王大剛--c語言編程寶典--函數.htm
字號:
*match(char c, char *s) <BR> {
<BR> int i=0;
<BR>
while(c!=s[i]&&s[i]!='\n')/*找字符串中指定的字符*/
<BR>
i++; <BR>
return(&s[i]);
/*返回所找字符的地址*/ <BR> } <BR> <BR>
<P> 三、用全程變量實現參數互傳 <BR>
以上兩種辦法可以在調用函數和被調用函數間傳遞參數, 但使用不太方便。如 <BR>果將所要傳遞的參數定義為全程變量,
可使變量在整個程序中對所有函數都可見。 <BR>這樣相當于在調用函數和被調用函數之間實現了參數的傳遞和返回。這也是實際中 <BR>經常使用的方法,
但定義全程變量勢必長久地占用了內存。因此, 全程變量的數目 <BR>受到限制, 特別對于較大的數組更是如此。當然對于絕大多數程序內存都是夠用的。
<BR> 例6: <BR>
#incluide<stdio.h> <BR> void disp(void);
<BR> int
m[10]; /*定義全程變量*/
<BR> int main() <BR> {
<BR> int i;
<BR> printf("In main
before calling\n");
<BR> for(i=0;
i<10; i++){
<BR>
m[i]=i;
<BR>
printf("%3d", m[i]); /*輸出調用子函數前數組的值*/
<BR> }
<BR>
disp();
/*調用子函數*/ <BR>
printf("\nIn main after calling\n");
<BR> for(i=0;
i<10; i++)
<BR>
printf("%3d", m[i]); /*輸出調用子函數后數組的值*/
<BR> getch();
<BR> return 0;
<BR> } <BR> void
disp(void) <BR> {
<BR> int j;
<BR> printf("In
subfunc after calling\n");/*子函數中輸出數組的值*/
<BR> for (j=0;
i<10; j++){
<BR>
m[j]=m[j]*10;
<BR>
printf("%3d", m[i]);
<BR> }
<BR> } <BR> <BR>
<P> 2.3 函數的遞歸調用 <BR> Turbo
C2.0允許函數自己調用自己, 即函數的遞歸調用, 遞歸調用可以使程序 <BR>簡潔、代碼緊湊, 但要犧牲內存空間作處理時的堆棧。
<BR> 如要求一個n!(n的階乘)的值可用下面遞歸調用: <BR> 例8:
<BR> #include<stdio.h>
<BR> unsigned ling mul(int n);
<BR> int main() <BR>
{ <BR> int m;
<BR> puts("Calculate
n! n=?\n"); <BR>
scanf("%d", &m);
/*鍵盤輸入數據*/ <BR>
printf("%d!=%ld\n", m, mul(m));/*調用子程序計算并輸出*/
<BR> getch();
<BR> retun 0;
<BR> } <BR> unsigned
long mul(int n) <BR> {
<BR> unsigned long
p; <BR> if(n>1)
<BR>
p=n*mul(n-1); /*遞歸調用計算n!*/
<BR> else
<BR>
p=1L; <BR>
return(p);
/*返回結果*/ <BR> } <BR>運行結果:
<BR> calculate
n! n=? <BR>輸入5時結果為:
<BR> 5!=120 <BR>
<P> 3. 函數作用范圍 <BR> <BR> Turbo
C2.0中每個函數都是獨立的代碼塊, 函數代碼歸該函數所有, 除了對函 <BR>數的調用以外,
其它任何函數中的任何語句都不能訪問它。例如使用跳轉語句goto <BR>就不能從一個函數跳進其它函數內部。除非使用全程變量, 否則一個函數內部定義
<BR>的程序代碼和數據, 不會與另一個函數內的程序代碼和數據相互影響。 <BR> Turbo
C2.0中所有函數的作用域都處于同一嵌套程度, 即不能在一個函數內再 <BR>說明或定義另一個函數。 <BR>
Turbo C2.0中一個函數對其它子函數的調用是全程的, 即是函數在不同的文件 <BR>中, 也不必附加任何說明語句而被另一函數調用,
也就是說一個函數對于整個程序 <BR>都是可見的。 <BR>
<P> 4. 函數的變量作用域 <BR> 在Turbo C2.0中,
變是可以在各個層次的子程序中加以說明, 也就是說, 在任 <BR>何函數中, 變量說明有只允許在一個函數體的開頭處說明, 而且允許變量的說明(
<BR>包括初始化)跟在一個復合語句的左花括號的后面, 直到配對的右花括號為止。它 <BR>的作用域僅在這對花括號內, 當程序執行到出花括號時,
它將不復存在。當然, 內 <BR>層中的變量即使與外層中的變量名字相同, 它們之間也是沒有關系的。 <BR>
例9. <BR> #include<stdio.h>
<BR> int i=10; <BR> int
main() <BR> {
<BR> int i=1;
<BR> printf("%d\t,
i); <BR> {
<BR>
int i=2;
<BR>
pritnf("%d\t", i);
<BR>
{
<BR>
extern i;
<BR>
i+=1;
<BR>
printf("%d\t", i);
<BR>
}
<BR>
printf("%d\t", ++i);
<BR> }
<BR> printf("%d\n",
++i); <BR> return 0;
<BR> } <BR> 運行結果為
<BR> 1 2
11 3 2 <BR> 從程序運行的結果不難看出程序中各變量之間的關系,
以及各個變量的作用域。 <BR> <BR>
<HR width="94%" color=#ee9b73 SIZE=1>
</TD>
<TD class=tt3 vAlign=bottom width="8%" bgColor=#e0e0e0><STRONG><A
href="http://www.cnread.net/cnread1/dnwl/cxsj/c/cyyb/019.htm">后一頁</A><BR><A
href="http://www.cnread.net/cnread1/dnwl/cxsj/c/cyyb/017.htm">前一頁</A><BR><A
href="http://www.cnread.net/cnread1/dnwl/cxsj/c/cyyb/index.html">回目錄</A><BR><A
href="http://www.cnread.net/cnread1/index.htm">回首頁</A><BR></STRONG></TD></TR></TBODY></TABLE></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -