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