一、函式概念及基本特徵
也就是一段可以重複使用的**。c語言本身自帶許多庫函式,當然我們也可以自己編輯函式。
函式的乙個明顯特徵就是使用時帶括號( ),必要的話,括號中還要包含資料或變數,稱為引數(parameter)。引數是函式需要處理的資料,例如:
strlen(str1)用來計算字串的長度,str1就是引數。
puts("c語言中文網")用來輸出字串,"c語言中文網"就是引數。
還有一點就是函式一定要有返回值,也就是函式的執行結果。
二、函式的格式
那麼我們自己定義的函式是什麼樣的呢?定義函式的格式為:
返回值型別 函式名()
函式體返回值可以是任意的資料型別,例如int、float等。
函式名是識別符號的一種,命名規則和識別符號一樣,以字母或下劃線開始,函式後面的括號()不能少。
函式體是函式需要執行的**,即使只有乙個語句也要{}包圍。
函式定義時給出的引數稱為形式引數,簡稱形參;函式呼叫時給出的引數(傳遞的資料)稱為實際引數,簡稱實參。函式呼叫時,將實參的值傳遞給形參,相當於一次賦值操作。 形參變數只有在函式被呼叫時才會分配記憶體,呼叫結束後,立刻釋放記憶體,所以形參變數只有在函式內部有效,不能在函式外部使用。
三、遞迴函式
乙個函式在它的函式體內呼叫它自身稱為遞迴呼叫,這種函式稱為遞迴函式。執行遞迴函式將反覆呼叫其自身,每呼叫一次就進入新的一層。
看乙個簡單的例子:求斐波那契數列(第一項為1,第二項為2,後一項等於前2項之和)的第n個數的值。
**如下:
1 #include 2
3 int func(int n);
4 5 int main()
6 12
13 int func(int n)
14
在定義了func()函式之後,在函式體中我們再次呼叫func()函式,反覆呼叫自身也就稱為遞迴。
四、全域性變數和區域性變數
定義在函式內部的變數稱為區域性變數(local variable),它的作用域僅限於函式內部, 離開該函式後就是無效的,再使用就會報錯。幾點說明:
1) 在 main 函式中定義的變數也是區域性變數,只能在 main 函式中使用;同時,main 函式中也不能使用其它函式中定義的變數。
2) 形參變數、在函式體內定義的變數都是區域性變數。實參給形參傳值的過程也就是給區域性變數賦值的過程。
3) 可以在不同的函式中使用相同的變數名,它們表示不同的資料,分配不同的記憶體,互不干擾,也不會發生混淆。
4) 在語句塊中也可定義變數,它的作用域只限於當前語句塊。
全域性變數
在所有函式外部定義的變數稱為全域性變數(global variable),它的作用域預設是整個程式,也就是所有的原始檔,包括 .c 和 .h 檔案。
注意:1、在區域性變數作用的範圍內,區域性變數有效,全域性變數被「遮蔽」不起作用。
2、c語言中的函式只能有乙個返回值,以此想要得到函式返回的多個值,可以使用全域性變數。
C語言學習 函式
先定義,後使用。型別名 函式名 或者 型別名 函式名 void 1 型別名這裡表示的是函式的返回值型別,也可以用void,表示不返回函式值 2 函式體包含宣告部分和語句部分 型別名 函式名 形式引數列表 1 形式引數列表,比如 int x,int y 型別名 函式名 比如 void dummy 單獨...
c語言學習筆記四
結構體 復合型別和結構體 復合型別 示例 struct test sturuct 如果用這種復合型別來定義變數 示例 struct test stuructz1,z2 定義訪問結構體 include int main void z int x 3 z.x x z.y 4 printf z f f z...
c語言學習筆記四
結構體 復合型別和結構體 復合型別 示例 struct test sturuct 如果用這種復合型別來定義變數 示例 struct test stuructz1,z2 定義訪問結構體 include int main void z int x 3 z.x x z.y 4 printf z f f z...