1.函數(function)聲明定義:html
見例子,不復述:https://www.runoob.com/cprogramming/c-functions.html函數
2. 函數參數(Parameters「顯式函數」 and Arguments「隱式函數」):spa
若是函數要使用參數,則必須聲明接受參數值的變量。這些變量稱爲函數的形式參數。.net
形式參數就像函數內的其餘局部變量,在進入函數時被建立,退出函數時被銷燬。命令行
當調用函數時,有兩種向函數傳遞參數的方式:翻譯
a. 傳值調用:該方法把參數的實際值複製給函數的形式參數。在這種狀況下,修改函數內的形式參數不會影響實際參數。 例子:c = swap(a,b) ,a和b的值不改變只是引用,c得出咱們想要的值。指針
b. 引用調用:經過指針傳遞方式,形參爲指向實參地址的指針,當對形參的指向操做時,就至關於對實參自己進行的操做。 例子:https://www.runoob.com/cprogramming/c-function-call-by-pointer.html, 用指針。htm
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函數。具體爲:
引用: