C語言回顧——認識函數

【1】函數概述
在C語言中,子程序的作用是由函數完成的;
一個C語言可由一個主函數和若干個其他函數構成,並且只能有一個主函數
由主函數來調用其他函數,其他子函數之間也可以相互調用;

C程序的執行總是從main()函數開始。調用其他函數完畢後,程序流程回到main()函數,繼續執行主函數的其他語句,直到main()函數結束,則整個程序的運行結束。

從用戶使用的角度看,函數分類如下:
①標準函數,即庫函數。這些函數由系統提供,可直接使用。
②自定義的函數。用以解決用戶需要時設計定義的函數。

從函數的形式看,函數分類如下:
⑴無參函數
⑵有參函數

【2】函數參數和函數返回值
1.形式參數和實際參數
●在定義函數時,函數名後面括號中的變量稱爲形式參數(形參)
●在主調函數中,函數名後面括號中的參數(可以是一個表達式)稱爲實際參數(實參)

2.函數的返回值
(1)定義:函數的返回值就是通過函數調用使主調函數能得到一個確定的值。
(2)表達形式:return 表達式;或return(表達式);或 return

●return語句中的表達式值的類型必須與函數首部所說明的類型一致。若類型不一致,則以函數值的類型爲準,由系統自動進行強制轉換。
●當函數沒有指明返回值,或沒有返回語句時,函數返回一個不確定的值。爲了使函數不返回任何值,可以使用void定義無類型函數。

【3】函數的調用

函數調用的一般形式:函數名(實參表列);

1.函數的調用可分爲調用無參函數和調用有參函數兩種
●調用無參函數時,不用“實參列表”,但括號不能省略。
●調用有參函數時,若實參列表中有多個實參,各參數間用逗號隔開。實參與形參要求類型一致。

2.函數的說明
C語言中,除了主函數外,對於用戶定義的函數要遵循先定義後使用的規則。把函數的定義放在調用之後,應該在調用之前對函數進行說明(或函數原型說明)

函數說明的一般形式如下:
類型名 函數名(參數類型1,參數類型2,…,參數類型n);

類型名 函數名(參數類型1 參數名1,參數類型2參數名2,…,參數類型n參數名n);

【4】函數的嵌套調用與遞歸調用
1.函數的嵌套調用
C語言的函數定義都是獨立的,互相平行的。

C語句不允許嵌套定義函數,即一個函數內不能定義另一個函數,但可以嵌套調用函數,即在調用一個函數的過程中,又調用另一個函數。

2.函數的遞歸調用
在調用一個函數的過程中又出現直接間接地調用該函數本身的,稱爲函數的遞歸調用。

使用遞歸法解決問題,需符合的條件如下:
☆可以把要解決的問題轉化爲一個新的問題,而這個新的問題的解決方法仍與原來的解決方法相同,只是所處理的對象有規律地遞增或遞減;
☆可以應用這個轉化過程使問題得到解決;
☆必須要有一個明確的結束遞歸的條件;

【5】數組作爲函數參數
1.數組元素作爲函數實參
數組元素可以作爲函數的實參,與用變量作爲實參一樣,按照單向值傳遞的方式進行傳遞

2.數組名可以作爲函數參數
可以用數組名作爲函數參數,此時實參與形參都應用數組名,此時的數組名是整個數組的首地址。

【6】全局變量和局部變量
在函數內部定義的變量稱爲局部變量,只能在本函數內部使用。
在函數之外定義的變量稱爲外部變量,外部變量是全局變量。

全局變量可以爲本文件中其他函數所共用,它的有效範圍從定義變量開始到本文件結束。

如果在同一個源文件中,外部變量與局部變量同名,則在局部變量的作用範圍內,外部變量被**“屏蔽”**,即此時外部變量不起作用。

【7】變量的存儲類別
1.auto變量
當在函數內部或複合語句內定義變量時,如果沒有指定存儲類別,或使用了auto說明符,系統就認爲所定義的變量具有自動類別。

2.register變量
寄存器變量也是自動類變量
它與auto變量的區別僅在於:用register說明變量是建議編譯程序將變量的值保留在CPU 的寄存器中,而不是像一般變量那樣佔用內存單元。

3.靜態存儲類別的局部變量
當函數體(或複合語句)內部用static來說明一個變量時,可以稱該變量爲靜態局部變量
它與auto 變量,register變量的本質區別如下:
1.在整個程序運行期間,靜態局部變量在內存中的靜態存儲區中佔據着永久性的存儲單元。即使退出函數後,下次再進入該函數時,靜態局部變量仍使用原來的存儲單元。由於不釋放這些存儲單元,這些存儲單元中的值得以保留,因而可以繼續使用存儲單元中原來的值。
2.靜態局部變量的初值是在編譯時賦予的,在程序執行期間不再賦以初值。對未賦值的局部變量,C語言編譯程序自動給它賦初值爲0。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章