C語言深入了解函數(shù)
1. 函數(shù)的概念
函數(shù)是c語言的功能單位,實現(xiàn)一個功能可以封裝一個函數(shù)來實現(xiàn)。
定義函數(shù)的時候一切以功能為目的,根據(jù)功能去定函數(shù)的參數(shù)和返回值。 函數(shù)就是將特定功能的代碼封裝在一個函數(shù)內(nèi)部,當(dāng)使用這些代碼時,只需要調(diào)用函數(shù)即可。
2. 函數(shù)的分類
從定義角度分
- 庫函數(shù)(即函數(shù)是誰實現(xiàn)的)
- 自定義函數(shù)
- 系統(tǒng)調(diào)用(操作系統(tǒng)實現(xiàn)的函數(shù))
從參數(shù)角度分類
有參函數(shù):函數(shù)有一個或多個形參(參數(shù)類型隨便)
int fun(int a ,float b,double c){ }
無參函數(shù):函數(shù)沒有參數(shù),在形參列表的位置寫void或什么都不寫
int fun(void) { }或 int fun( ){ }
從返回值角度分
帶返回值的函數(shù):在定義函數(shù)的時候,必須帶著返回值類型,在函數(shù)體里,必須有return,如果沒有返回值類型,默認(rèn)返回整型。
無返回值函數(shù):函數(shù)名前加void,return可以寫也可以不寫,寫的時候后面加一個分號即return;
3. 函數(shù)的定義
定義方法:
格式如下
返回值類型 函數(shù)名字(形參列表,用逗號分隔開) {
//函數(shù)體,函數(shù)的功能在函數(shù)體里實現(xiàn)
}
int max(int a,int b) { int z; if (x>y){ z = x; } else{ z = y; } return z; }
注意:函數(shù)名字是標(biāo)識符,所以要滿足標(biāo)識符的命名規(guī)則
return 后面跟的變量類型必須與函數(shù)名左邊的類型一致
在一個程序中,相同的函數(shù)名只能出現(xiàn)依次
#include<stdio.h> // 定義一個沒有參數(shù)也沒有返回值的函數(shù) void myfunc1(){ printf("哇哦哇哦\n"); return ; } //定義一個無返回值,有參數(shù)的函數(shù) void myfunc2(int a,int b){ int sum; sum = a + b; printf("%d + %d = %d\n",a,b,sum); } //定義一個有返回值,有參數(shù)的函數(shù) int myfunc3(int a,int b){ int sum; sum = a + b; return sum; } int main(){ // 調(diào)用函數(shù)myfunc1 // 調(diào)用的時候不用加返回值類型 myfunc1(); return 0; }
4. 函數(shù)的聲明
概念:對已經(jīng)定義的函數(shù),進(jìn)行說明,函數(shù)可以多次聲明
為什么要進(jìn)行聲明? 有些情況下,如果不對函數(shù)進(jìn)行聲明,編譯器在編譯的時候,可能不認(rèn)識這個函數(shù),因為編譯器在編譯c程序的時候,是從上往下編譯的。
- 主調(diào)函數(shù)和被調(diào)函數(shù)在同一個.c文件中的時候:
(1)被調(diào)函數(shù)在上,主調(diào)函數(shù)在下,不需要聲明,即下面的函數(shù)可以調(diào)用上面的函數(shù)
(2)被調(diào)函數(shù)在下,主調(diào)函數(shù)在上,需要聲明。
對于一些高級的編譯器,不用聲明也能調(diào)用函數(shù),但是會彈出很多warning。
聲明的方式
1.直接聲明法:將被調(diào)用的函數(shù)的定義拷貝過去,后面加分號,如下例:
#include<stdio.h> void myfunc1(); // 直接聲明 int main(){ myfunc1(); return 0; } void myfunc1(){ printf("哇哦哇哦\n"); return ; }
2.間接聲明:將函數(shù)的聲明放在頭文件中, .c程序包含頭文件即可(例子待補(bǔ)充…)
- 主調(diào)函數(shù)和被調(diào)函數(shù)在不同一個.c文件中的時候:
一定要聲明?。?!
聲明的方式
1.直接聲明:將被調(diào)用的函數(shù)的定義拷貝過去,后面加分號,前面加 extern
2.間接聲明:將函數(shù)的聲明放在頭文件中, .c程序包含頭文件即可
5. 函數(shù)的調(diào)用
變量=函數(shù)名(實參列表); // 帶返回值的
函數(shù)名(實參列表); // 不帶返回值的
推薦閱讀:《形參和實參的區(qū)別》
#include<stdio.h> int sum(int a,int b){ // 定義帶返回值的函數(shù),定義的時候是形參 int sum = a + b; return sum; } void func(){ printf("我是無返回值函數(shù)!\n"); printf("我是老六~\n"); return; } int main(){ int re = sum(1,2); // 調(diào)用帶返回值的函數(shù),調(diào)用的時候是實參,定義一個int類型的變量re來接收sum函數(shù)返回的結(jié)果 printf("結(jié)果是:%d\n",re); func(); // 調(diào)用無返回值函數(shù) return 0; }
6. 遞歸函數(shù)
自己調(diào)用自己的函數(shù)叫做遞歸函數(shù)
遞歸函數(shù)調(diào)用會在計算機(jī)里同時存在多個,其中最后一個是當(dāng)前正在工作的那個。
一個非常復(fù)雜的問題,如果可以拆分成多個小問題,其中至少有一個小問題和原來的問題本質(zhì)上一樣,只是規(guī)模小一些,就可以采用遞歸來解決。
編寫原則
首先要在遞歸函數(shù)中編寫語句描述問題的拆分方式
在遞歸函數(shù)的開始編寫分支解決不再拆分的情況(這種情況必須保證程序可以結(jié)束)
到此這篇關(guān)于C語言深入了解函數(shù)的文章就介紹到這了,更多相關(guān)C語言函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言數(shù)據(jù)結(jié)構(gòu)實現(xiàn)鏈表去重的實例
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)實現(xiàn)鏈表去重的實例的相關(guān)資料,這里提供了題目及實例代碼,需要的朋友可以參考下2017-07-07C語言編程內(nèi)存分配通訊錄靜態(tài)實現(xiàn)示例代碼教程
這篇文章主要為大家介紹了C語言編程實現(xiàn)靜態(tài)的通訊錄示例代碼教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-10-10MFC中動態(tài)創(chuàng)建控件以及事件響應(yīng)實現(xiàn)方法
這篇文章主要介紹了MFC中動態(tài)創(chuàng)建控件以及事件響應(yīng)實現(xiàn)方法,詳細(xì)講解了MFC中動態(tài)創(chuàng)建控件以及事件響應(yīng)的概念與實現(xiàn)方法,具有一定的實用價值,需要的朋友可以參考下2014-10-10C++ virtual destructor虛擬析構(gòu)函數(shù)
C++中基類采用virtual虛析構(gòu)函數(shù)是為了防止內(nèi)存泄漏。具體地說,如果派生類中申請了內(nèi)存空間,并在其析構(gòu)函數(shù)中對這些內(nèi)存空間進(jìn)行釋放,今天通過本文給大家介紹C++ virtual destructor虛擬析構(gòu)函數(shù)的相關(guān)知識,感興趣的朋友一起看看吧2021-05-05