1.函式(function)宣告定義:
見例子,不復述:https://www.runoob.com/cprogramming/c-functions.html
2. 函式引數(Parameters“顯式引數” and Arguments“隱式引數”):
如果函式要使用引數,則必須宣告接受引數值的變數,這些變數稱為函式的形式引數,
形式引數就像函式內的其他區域變數,在進入函式時被創建,退出函式時被銷毀,
當呼叫函式時,有兩種向函式傳遞引數的方式:
a. 傳值呼叫:該方法把引數的實際值復制給函式的形式引數,在這種情況下,修改函式內的形式引數不會影響實際引數, 例子:c = swap(a,b) ,a和b的值不改變只是參考,c得出我們想要的值,
b. 參考呼叫:通過指標傳遞方式,形參為指向實參地址的指標,當對形參的指向操作時,就相當于對實參本身進行的操作, 例子:https://www.runoob.com/cprogramming/c-function-call-by-pointer.html, 用指標,
3.內部函式(static function):
如果一個函式只能被本檔案中其他函式所呼叫,它稱為內部函式,在定義內部函式時,在函式名和函式型別的前面加 static,內部函式又稱靜態函式,使用內部函式,可以使函式的作用域只局限于所在檔案,即使在不同的檔案中有同名的內部函式,也互不干擾,提高了程式的可靠性, 例子:static int max(int a,int b)
4.外部函式(external function) :
C 語言規定,定義外部函式時,可以省略關鍵字extern,但是參考的時候一定要標記extern!
如果在定義函式時,在函式的首部的最左端加關鍵字 extern,則此函式是外部函式,可供其它檔案呼叫,
如函式首部可以為 extern int max (int a,int b)
5.行內函式(Inline function) :和內部函式不一樣!
一般來說,呼叫一個函式流程為:當前呼叫命令的地址被保存下來,程式流跳轉到所呼叫的函式并執行該函式,最后跳轉回之前所保存的命令地址,
對于需要經常呼叫的小函式來說,這大大降低了程式運行效率,所以,C99 新增了行內函式(inline function),
關鍵字 inline 告訴編譯器,任何地方只要呼叫行內函式,就直接把該函式的機器碼插入到呼叫它的地方,這樣程式執行更有效率,就好像將行內函式中的陳述句直接插入到了源代碼檔案中需要呼叫該函式的地方一樣,
要將一個函式定義為行內函式,需要在函式定義時加上 inline 函式修飾符,見例子:http://c.biancheng.net/view/339.html
注意: a.一般來說,不建議把將包含回圈的函式定義成行內函式,例如函式 selection_sortf(),b. inline 修飾符并非強制性的:編譯器有可能會置之不理,c. 在每個用到行內函式的翻譯單元中,都必須重復定義這個行內函式 d.遞回函式不能定義為行內函式 e. 行內函式一般適合于不存在while和switch等復雜的結構且只有1~5條陳述句的小函式上,否則編譯系統將該函式視為普通函式, f.行內函式只能先定義后使用,否則編譯系統也會把它認為是普通函式, g.對行內函式不能進行例外的介面宣告,
6.關于main 函式:
int main( int argc, char *argv[])
那么 main 函式到底有沒有引數,有沒有引數會不會有什么影響?
main 函式其實與我們寫的函式沒有什么區別,它也會有自己的引數,
argc 和 argv 是 main 函式的形式引數,
這兩個形式引數的型別是系統規定的,如果 main 函式要帶引數,就是這兩個型別的引數;否則main函式就沒有引數,
變數名稱argc和argv是常規的名稱,當然也可以換成其他名稱,在傳入引數后main函式收到引數后就會做自己的事,那么,實際引數是如何傳遞給main函式的argc和argv的呢?我們知道,C程式在編譯和鏈接后,都生成一個exe檔案,執行該exe檔案時,可以直接執行;也可以在命令列下帶引數執行,命令列執行的形式為:可執行檔案名稱 引數1 引數2 ... ... 引數n,可執行檔案名稱和引數、引數之間均使用空格隔開,
如果按照這種方法執行,命令列字串將作為實際引數傳遞給main函式,具體為:
- (1) 可執行檔案名稱和所有引數的個數之和傳遞給 argc;
- (2) 可執行檔案名稱(包括路徑名稱)作為一個字串,首地址被賦給 argv[0],引數1也作為一個字串,首地址被賦給 argv[1],... ...依次類推,
參考:
https://www.runoob.com/cprogramming/c-functions.html
http://c.biancheng.net/view/339.html

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/63299.html
標籤:C
