在C語言中一個函數(shù)一般由兩個部分組成一個是函數(shù)頭,一個是函數(shù)體。
網站制作、成都做網站服務團隊是一支充滿著熱情的團隊,執(zhí)著、敏銳、追求更好,是創(chuàng)新互聯(lián)的標準與要求,同時竭誠為客戶提供服務是我們的理念。創(chuàng)新互聯(lián)把每個網站當做一個產品來開發(fā),精雕細琢,追求一名工匠心中的細致,我們更用心!
函數(shù)體是編程語言中定義一個函數(shù)功能的所有代碼組成的整體。函數(shù)體是用花括號括起來的若干語句,他們完成了一個函數(shù)的具體功能。函數(shù)體內的前面是定義和說明部分,后面是語句部分。函數(shù)聲明與函數(shù)體放在一起組成了函數(shù)定義。
函數(shù)頭是指函數(shù)體之前的所有部分,應用于數(shù)學、程序設計領域,作用是給出了該函數(shù)的返回類型。在一個函數(shù)定義中,函數(shù)體之前的所有部分稱為函數(shù)頭,它給出了該函數(shù)的返回類型、每個參數(shù)的次序和類型等函數(shù)原型信息,所以當沒有專門給出函數(shù)原型說明語句時,系統(tǒng)就從函數(shù)頭中獲取函數(shù)原型信息。
擴展資料?
函數(shù)體使用示例:
main(){printf()();printf()();}//函數(shù)體是花括號內的所有語句的集合,包括花括號在內
一個函數(shù)的原型語句就是其函數(shù)頭的一個拷貝,當然要在最后加上語句接上結束符分號。函數(shù)原型語句與函數(shù)頭也有細微的差別。
在函數(shù)原型語句中,其參數(shù)表中的每個參數(shù)允許只保留參數(shù)類型,而省略參數(shù)名,并且若使用參數(shù)名也允許與函數(shù)頭中對應的參數(shù)名不同。
參考資料來源:百度百科—函數(shù)頭
參考資料來源:百度百科—函數(shù)體
在一個函數(shù)定義中,函數(shù)體之前的所有部分稱為函數(shù)頭,它給出了該函數(shù)的返回類型、每個參數(shù)的次序和類型等函數(shù)原型信息,所以當沒有專門給出函數(shù)原型說明語句時,系統(tǒng)就從函數(shù)頭中獲取函數(shù)原型信息。
一個函數(shù)的原型語句就是其函數(shù)頭的一個拷貝,當然要在最后加上語句接上結束符分號。函數(shù)原型語句與函數(shù)頭也有細微的差別,在函數(shù)原型語句中,其參數(shù)表中的每個參數(shù)允許只保留參數(shù)類型,而省略參數(shù)名,并且若使用參數(shù)名也允許與函數(shù)頭中對應的參數(shù)名不同。
全文如下:
一)、定義格式
類型名 函數(shù)名 ([參數(shù)表]) 函數(shù)體
類型名為系統(tǒng)或用戶已定義的一種數(shù)據類型,它是函數(shù)執(zhí)行過程中通過return語句要求返回的值的類型,又稱為該函數(shù)的類型。當一個函數(shù)不需要通過return語句返回一個值時,稱為無返回值函數(shù)或無類型函數(shù),此時需要使用保留字void作為類型名。當類型名為int時,可以省略不寫,但為了清楚起見,還是寫明為好。
函數(shù)名是用戶為函數(shù)所起的名字,它是一個標識符,應符合C++標識符的一般命名規(guī)則,用戶通過使用這個函數(shù)名和實參表可以調用該函數(shù)。
參數(shù)表又稱形式參數(shù)表,它包含有任意多個(含0個,即沒有)參數(shù)說明項,當多于一個時其前后兩個參數(shù)說明項之間必須用逗號分開。每個參數(shù)說明項由一種已定義的數(shù)據類型和一個變量標識符組成,該變量標識符成為該函數(shù)的形式參數(shù),簡稱形參,形參前面給出的數(shù)據類型稱為該形參的類型。一個函數(shù)定義中的參數(shù)表可以被省略,表明該函數(shù)為無參函數(shù),若參數(shù)表用void取代,則也表明是無參函數(shù),若參數(shù)表不為空,同時又不是保留字void,則稱為帶參函數(shù)。
函數(shù)體是一條復合語句,它以左花括號開始,到右花括號結束,中間為一條或若干條C++語句。
在一個函數(shù)的參數(shù)表中,每個參數(shù)可以為任一種數(shù)據類型,包括普通類型、指針類型、數(shù)組類型、引用類型等,一個函數(shù)的返回值可以是除數(shù)組類型之外的任何類型,包括普通類型、指針類型和引用類型等。另外,當不需要返回值時,應把函數(shù)定義為void類型。
二)、定義格式舉例
(1) void f1() {...}
(2) void f2(int x) {...}
(3) int f3(int x,int* p) {...}
(4) char* f4(char a[]){...}
(5) int f5(int x,double d) {...}
(6) int f6(int b[10], int n) {...}
(7) void f7(float c[][N], int m, float max) {...}
(8) bool f8(ElemType* bt, ElemType item) {...}
在第一條函數(shù)定義中,函數(shù)名為f1,函數(shù)類型為void,參數(shù)表為空,此函數(shù)是一個無參無類型函數(shù)。若在f1后面的圓括號內寫入保留字void,也表示為無參函數(shù)。
在第二條函數(shù)定義中,僅帶有一個類型為int的形參變量x,該函數(shù)沒有返回值。
在第三條函數(shù)定義中,函數(shù)名為f3,函數(shù)類型為int,函數(shù)參數(shù)為x和p,其中x為int型普通參數(shù),p為int*型指針參數(shù)。
在第四條函數(shù)定義中,函數(shù)名為f4,函數(shù)類型為char*,即字符指針類型,參數(shù)表中包含一個一維字符數(shù)組參數(shù)。注意:在定義任何類型的一維數(shù)組參數(shù)時,不需要給出維的尺寸,當然給出也是允許的,但沒有任何意義。
在第五條函數(shù)定義中,函數(shù)名為f5,返回類型為int,該函數(shù)帶有兩個形參,一個為 整型引用變量x,另一個為雙精度變量d。
在第六條函數(shù)定義中,函數(shù)名為f6,函數(shù)類型為int,即整型引用,該函數(shù)帶有兩個形參,一個是整型數(shù)組b,另一個是整型變量n。在這里定義形參數(shù)組b所給出的維的尺寸10可以被省略。
在第七條函數(shù)定義中,函數(shù)名為f7,無函數(shù)類型,參數(shù)表中包含三個參數(shù),一個為二維單精度型數(shù)組c,第二個為整型變量m,第三個為單精度引用變量max。注意:當定義一個二維數(shù)組參數(shù)時,第二維的尺寸必須給出,并且必須是一個常量表達式,第一維尺寸可給出也可不給出,其作用相同。
在第八條函數(shù)定義中,函數(shù)名為f8,返回類型為bool,即邏輯類型,該函數(shù)帶有兩個參數(shù),一個為形參bt,它為ElemType的指針引用類型,另一個為形參item,它是ElemType的引用類型,其中ElemType為一種用戶定義的類型或是通過typedef語句定義的一個類型的別名。
三)、有關函數(shù)定義的幾點說明
1. 函數(shù)原型語句
在一個函數(shù)定義中,函數(shù)體之前的所有部分稱為函數(shù)頭,它給出了該函數(shù)的返回類型、每個參數(shù)的次序和類型等函數(shù)原型信息,所以當沒有專門給出函數(shù)原型說明語句時,系統(tǒng)就從函數(shù)頭中獲取函數(shù)原型信息。
一個函數(shù)必須先定義或聲明而后才能被調用,否則編譯程序無法判斷該調用的正確性。一個函數(shù)的聲明是通過使用一條函數(shù)原型語句實現(xiàn)的,當然使用多條相同的原型語句聲明同一個函數(shù)雖然多余但也是允許的,編譯時不會出現(xiàn)錯誤。
在一個完整的程序中,函數(shù)的定義和函數(shù)的調用可以在同一個程序文件中,也可以處在不同的程序文件中,但必須確保函數(shù)原型語句與函數(shù)調用表達式出現(xiàn)在同一個文件中,并且函數(shù)原型語句出現(xiàn)在前,函數(shù)的調用出現(xiàn)在后。
通常把一個程序中用戶定義的所有函數(shù)的原型語句組織在一起,構成一個頭文件,讓該程序中所含的每個程序文件的開始(即所有函數(shù)定義之前)包含這個頭文件(通過#include命令實現(xiàn)),這樣不管每個函數(shù)的定義在哪里出現(xiàn),都能夠確保函數(shù)先聲明后使用(即調用)這一原則的實現(xiàn)。
一個函數(shù)的原型語句就是其函數(shù)頭的一個拷貝,當然要在最后加上語句接上結束符分號。函數(shù)原型語句與函數(shù)頭也有細微的差別,在函數(shù)原型語句中,其參數(shù)表中的每個參數(shù)允許只保留參數(shù)類型,而省略參數(shù)名,并且若使用參數(shù)名也允許與函數(shù)頭中對應的參數(shù)名不同。
2. 常量形參
在定義一個函數(shù)時,若只允許函數(shù)體訪問一個形參的值,不允許修改它的值,則應把該形參說明為常量,這只要在形參說明的前面加上const保留字進行修飾即可。如:
void f9(const int x, const char y);
void f10(const char* p, char key);
在函數(shù)f9的函數(shù)體中只允許使用x和y的值,不允許修改它們的值。在函數(shù)f10的函數(shù)體中只允許使用p所指向的字符對象或字符數(shù)組對象的值,不允許修改它們的值,但在函數(shù)體中既允許使用也允許修改形參key的值。
3. 缺省參數(shù)
在一個函數(shù)定義中,可根據需要對參數(shù)表末尾的一個或連續(xù)若干個參數(shù)給出缺省值,當調用這個函數(shù)時,若實參表中沒有給出對應的實參,則形參將采用這個缺省值。如:
void f11(int x, int y=0) {...}
int f12(int a[], char op='+', int k=10) {...}
函數(shù)f11的定義帶有兩個參數(shù),分別為整型變量x和y,并且y帶有缺省值0,若調用該函數(shù)的表達式為f11(a,b),將把a的值賦給x,把b的值賦給y,接著執(zhí)行函數(shù)體;若調用該函數(shù)的表達式為f11(a+b),則也是正確的調用格式,它將把a+b的值賦給x,因y沒有對應的實參,將采用缺省值0,參數(shù)傳送后接著執(zhí)行函數(shù)體。
函數(shù)f12的定義帶有三個參數(shù),其中后兩個帶有缺省值,所以調用它的函數(shù)格式有三種,一種只帶一個實參,用于向形參a傳送數(shù)據,后兩個形參采用缺省值,第二種帶有兩個實參,用于分別向形參a和op傳送數(shù)據,第三個形參采用缺省值,第三種帶有三個實參,分別用于傳送給三個形參。
若一個函數(shù)帶有專門的函數(shù)原型語句,則形參的缺省值只能在該函數(shù)原型語句中給出,不允許在函數(shù)頭中給出。如對于上述的f11和f12函數(shù),其對應的函數(shù)原型語句分別為:
void f11(int x, int y=0);
int f12(int a[], char op='+', int k=10);
函數(shù)定義應分別改寫為:
void f11(int x, int y) {...}
int f12(int a[], char op, int k) {...}
4. 數(shù)組參數(shù)
在函數(shù)定義中的每個數(shù)組參數(shù)實際上是指向元素類型的指針參數(shù)。對于一維數(shù)組參數(shù)說明:
數(shù)據類型 數(shù)組名[]
它與下面的指針參數(shù)說明完全等價:
數(shù)據類型 *指針變量名
其中指針變量名就是數(shù)組參數(shù)說明中的數(shù)組名。如對于f12函數(shù)定義中的數(shù)組參數(shù)說明int a[],等價于指針參數(shù)說明int* a。也就是說,數(shù)組參數(shù)說明中的數(shù)組名a是一個類型為int*的形參。注意:在變量定義語句中定義的數(shù)組,其數(shù)組名代表的是一個數(shù)組,它的值是指向第一個元素的指針常量,這與數(shù)組形參的含義有區(qū)別。
對于二維數(shù)組參數(shù)說明:
數(shù)據類型 參數(shù)名[][第二維尺寸]
它與下面的指針參數(shù)說明完全等價:
數(shù)據類型 (*參數(shù)名)[第二維尺寸]
如對于f7函數(shù)定義中的二維數(shù)組參數(shù)說明float c[][N],等價于指針參數(shù)說明float(*c)[N]。
5. 函數(shù)類型
當調用一個函數(shù)時就執(zhí)行一遍循環(huán)體,對于類型為非void的函數(shù),函數(shù)體中至少必須帶有一條return語句,并且每條return語句必須帶有一個表達式,當執(zhí)行到任一條return語句時,將計算出它的表達式的值,結束整個函數(shù)的調用過程,把這個值作為所求的函數(shù)值帶回到調用位置,參與相應的運算;對于類型為void的函數(shù),它不需要返回任何函數(shù)值,所以在函數(shù)體中既可以使用return語句,也可以不使用,對于使用的每條return語句不允許也不需要帶有表達式,當執(zhí)行到任一條return語句時,或執(zhí)行到函數(shù)體最后結束位置時,將結束函數(shù)的調用過程,返回到調用位置向下繼續(xù)執(zhí)行。
6. 內聯(lián)函數(shù)
當在一個函數(shù)的定義或聲明前加上關鍵字inline則就把該函數(shù)聲明為內聯(lián)函數(shù)。計算機在執(zhí)行一般函數(shù)的調用時,無論該函數(shù)多么簡單或復雜,都要經過參數(shù)傳遞、執(zhí)行函數(shù)體和返回等操作。若把一個函數(shù)聲明為內聯(lián)函數(shù)后,在程序編譯階段系統(tǒng)就有可能把所有調用該函數(shù)的地方都直接替換為該函數(shù)的執(zhí)行代碼,由此省去函數(shù)調用時的參數(shù)傳遞和返回操作,從而加快整個程序的執(zhí)行速度。通常可把一些相對簡單的函數(shù)聲明為內聯(lián)函數(shù),對于較復雜的函數(shù)則不應聲明為內聯(lián)函數(shù)。從用戶的角度看,調用內聯(lián)函數(shù)和一般函數(shù)沒有任何區(qū)別。下面就是一個內聯(lián)函數(shù)定義的例子,它返回形參值的立方。
inline int cube(int n)
{
return n*n*n;
}
scanf和printf函數(shù)是系統(tǒng)定義的函數(shù),函數(shù)的首部和函數(shù)體在定義的時候有。我們用的時候一直看到的是已經定義好了的,系統(tǒng)默認有效的。
所以不需要在程序開頭重新寫出來函數(shù)頭部分。
擴展資料:
scanf()是C語言中的一個輸入函數(shù)。與printf函數(shù)一樣,都被聲明在頭文件stdio.h里,因此在使用scanf函數(shù)時要加上#include stdio.h。(在有一些實現(xiàn)中,printf函數(shù)與scanf函數(shù)在使用時可以不使用預編譯命令#include stdio.h。)它是格式輸入函數(shù),即按用戶指定的格式從鍵盤上把數(shù)據輸入到指定的變量之中。
printf:
格式輸出,它是c語言中產生格式化輸出的函數(shù)(在 stdio.h 中定義)。用于向終端(顯示器、控制臺等)輸出字符。格式控制由要輸出的文字和數(shù)據格式說明組成。
stdarg.h
stdarg.h是C語言中C標準函數(shù)庫的頭文件,stdarg是由standard(標準) arguments(參數(shù))簡化而來,主要目的為讓函數(shù)能夠接收可變參數(shù)。C++的cstdarg頭文件中也提供這樣的功能;雖然與C的頭文件是兼容的,但是也有沖突存在。
可變參數(shù)函數(shù)(Variadic functions)是stdarg.h內容典型的應用,雖然也可以使用在其他由可變參數(shù)函數(shù)調用的函數(shù)(例如,vprintf)。
新聞標題:vs寫c語言函數(shù)頭是啥 vs2019c++頭文件
本文鏈接:http://muchs.cn/article2/ddoooic.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供云服務器、網站導航、網站改版、網站收錄、網站設計公司、用戶體驗
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)