函數(shù)是用戶與程序的接口,在定義一個函數(shù)前,首先要清楚以下三個問題。1) 函數(shù)的功能實現(xiàn)及算法選擇。算法選擇會在后續(xù)文章詳細(xì)講解,本節(jié)重點關(guān)注函數(shù)的功能實現(xiàn)。一般選取能體現(xiàn)函數(shù)功能的函數(shù)名,且見名知意,如求和函數(shù)的函數(shù)名可取為 add,求最大值的函數(shù)名可取為 max,排序函數(shù)可取名為 sort 等。2) 需要用戶傳給該函數(shù)哪些參數(shù)、什么類型,即函數(shù)參數(shù)。3) 函數(shù)執(zhí)行完后返回給調(diào)用者的參數(shù)及類型,即函數(shù)返回值類型。 函教定義格式 函數(shù)定義的一般格式為: 返回類型 函數(shù)名 (類型參數(shù)1,類型參數(shù)2,…) {函數(shù)體 }也可以不含參數(shù),不含參數(shù)時,參數(shù)表中可寫關(guān)鍵字 void 或省略,為規(guī)范起見,教程中對沒有參數(shù)的函數(shù),參數(shù)表中統(tǒng)一寫 void。例如: 類型 函數(shù)名 () {函數(shù)體 }等價于: 類型 函數(shù)名 (void) //建議的書寫方式 {函數(shù)體 } 如果該函數(shù)沒有返回類型,則為 void 類型。例如: void add (int x,int y) {printf ("sum=%d\n", x+y); } 除了 void 類型外,在函數(shù)體中,均需要顯式使用 return 語句返回對應(yīng)的表達(dá)式的值。 函教返回值 函數(shù)的值是指調(diào)用函數(shù)結(jié)束時,執(zhí)行函數(shù)體所得并返回給主調(diào)函數(shù)的值。 關(guān)于函數(shù)返回值說明如下。1) 帶返回值的函數(shù),其值一般使用 return 語句返回給調(diào)用者。其格式為: return 表達(dá)式;或者 return (表達(dá)式);例如: int add (int a, int b) {return (a + b); //return 后為表達(dá)式 } 函數(shù)可以含一個或多個 return 語句,但每次調(diào)用時只能執(zhí)行其中一個 return 語句。例如,求整數(shù)絕對值的函數(shù): int f (int n) //含多個return語句,但每次調(diào)用只執(zhí)行一個 {if (n = 0)return n;elsereturn -n; }
創(chuàng)新互聯(lián)專注于青岡網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供青岡營銷型網(wǎng)站建設(shè),青岡網(wǎng)站制作、青岡網(wǎng)頁設(shè)計、青岡網(wǎng)站官網(wǎng)定制、小程序定制開發(fā)服務(wù),打造青岡網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供青岡網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
樓主可以這樣想,C語言中,無論是常量,變量,函數(shù),只有先定義才能使用的。在函數(shù)定義時,大腦要往一般的常量,變量定義的方向,切忌先不要想函數(shù)的別的。定義好后,把函數(shù)的定義先放一邊,不管它。
接著是函數(shù)聲明,大家都知道,C語言是有一個主函數(shù)main()和0或n個普通函數(shù)組成的。由于當(dāng)代碼越長,用到的函數(shù)就越多,為了減少函數(shù)的混淆,所以要有個函數(shù)名,就像老師點名一樣,聲明一個函數(shù),就如點一個學(xué)生的名字。
總之,函數(shù)定義是系統(tǒng)要求的,不定義就錯誤,而函數(shù)聲明實際上不定義也行,但為了方便和減少錯誤,人為規(guī)定要聲明。
假設(shè)主函數(shù)main()。其他函數(shù)void fun(int a,int *b)。
關(guān)于函數(shù)定義和聲明:
在代碼中fun函數(shù),有完整函數(shù)體的代碼就是函數(shù)定義部分,比如void fun(int a,int *b){。。。};。
如果沒有具體實現(xiàn)的函數(shù)體代碼(也就是大括號內(nèi)容),那么就是函數(shù)聲明。比如void fun(int ,int *);
關(guān)于函數(shù)聲明和調(diào)用:
如果fun函數(shù)定義在main代碼上面。比如:
void fun(int a,int *b){。。。};
int main(){
int a=0,int b=0;
......
fun(a,b);//這里fun定義代碼在main上面,所以可以不需要聲明。反之需要先寫聲明語句
return 0;
}
關(guān)于函數(shù)局部變量及全局變量:
簡單區(qū)分:
定義在函數(shù)之外的就是全局變量,這個變量所有函數(shù)都可以直接使用,并且共用同一個地址。任意函數(shù)修改了變量值,其他函數(shù)調(diào)用也會變。
定義在函數(shù)之內(nèi)的就是局部變量,局部變量只屬于該函數(shù),其他函數(shù)即使定義了同樣名字的變量,這兩個變量也不同地址,互不相干。
比如:
int a;//這就是全局變量,作用域下所有函數(shù)共用
int main()
{
int b;//這就是局部變量,只在本函數(shù)有效,如果想在調(diào)用fun函數(shù)時讓fun也使用該變量,需要把這個變量的地址作為參數(shù)傳遞過去。
printf("%d",b);
return 0;
}
注意:c語言中允許局部變量和全局變量同名,但是同名的局部變量會屏蔽全局變量,實際代碼避免同名。
關(guān)于函數(shù)傳值和傳址:
如函數(shù)void fun(int a,int *b){..........};這里形參a 和*b,分別表示一個值和一個地址
所以在調(diào)用該函數(shù)時,比如:
int main()
{
int c,d;
fun(c,d);//這里調(diào)用就對應(yīng)上面形參類型,第一個參數(shù)傳遞了c的值(傳值),第二個參數(shù)傳遞了d的地址(傳址),這里c和d,叫做實參。當(dāng)fun函數(shù)運行時改變了a和b指向地址的值,對應(yīng)main函數(shù)中c的值不變,d的值改變。
return 0;
}
順帶一說:局部變量,在函數(shù)運行結(jié)束后會自動釋放,所以想把局部變量地址作為返回值,需要用malloc函數(shù)申請。(這里看不懂可以暫時忽視)
需要準(zhǔn)備的材料分別有:電腦、C語言編譯器。
1、首先,打開C語言編譯器,新建一個初始.cpp文件,例如:test.cpp。
2、在test.cpp文件中,輸入C語言代碼:int fun(){return 1;}。
3、編譯器運行test.cpp文件,此時成功調(diào)用fun()函數(shù)輸出了內(nèi)容。
函數(shù)聲明它為編譯器提供了有用的信息,編譯器在翻譯代碼的過程中,只有見到函數(shù)原型(這里即可以是聲明也可以是定義)之后才知道這個函數(shù)的名字、參數(shù)類型和返回值,這樣碰到函數(shù)調(diào)用時才知道怎么生成相應(yīng)的指令,所以函數(shù)原型必須出現(xiàn)在函數(shù)調(diào)用之前,這也是遵循“先聲明后使用”的原則。
注意上面說的函數(shù)原型是包括函數(shù)聲明和定義兩種形式的。
另外還有一種特殊情況,就是
隱式聲明:
隱式聲明的函數(shù)返回值類型都是int;
如下
#includestdio.h
main()
{
printf("%d\n",jiec(5));
}
int jiec(int n)
{
int y=1;int i;
for(i=1;i=n;i++)
y=y*i;
return(y);
}
這個程序也是可以運行的。主要返回值為int.