當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 學(xué)習(xí)筆記 > 嵌入式學(xué)習(xí)筆記:函數(shù)入門(mén)知識(shí)總結(jié)
函數(shù)的意義
函數(shù)是一段程序,可以完成一個(gè)功能,例如:printf
提高程序的通用性,減少重復(fù)的代碼(具有相似功能的代碼)
實(shí)現(xiàn)模塊化設(shè)計(jì)的基礎(chǔ)
1.2函數(shù)的分類(lèi)
main()函數(shù),每個(gè)程序都必須要實(shí)現(xiàn)的,程序從main()函數(shù)開(kāi)始執(zhí)行,從main()函數(shù)結(jié)束
庫(kù)函數(shù):由系統(tǒng)已經(jīng)實(shí)現(xiàn)的函數(shù),例如:printf
自定義函數(shù):用戶(hù)自行設(shè)計(jì)并實(shí)現(xiàn)
1.3函數(shù)的使用
以math(數(shù)學(xué)庫(kù))為例,用man math.h查看庫(kù)中函數(shù)
注意:必須有頭文件:#include
例子1:pow()
函數(shù)功能:計(jì)算x的y次方,可使用man pow可查看pow()函數(shù)的使用方法
函數(shù)模型:double pow(double x,double y)
提供的信息:需要的參數(shù),返回的結(jié)果的類(lèi)型
使用函數(shù)的語(yǔ)法:函數(shù)名(參數(shù)列表)
實(shí)際情況
例子2:sqrt()
函數(shù)的功能:計(jì)算一個(gè)數(shù)的平方根
函數(shù)原型:double sqrt() //
提供的信息:需要提供一個(gè)double類(lèi)型的參數(shù)
使用函數(shù)提供的參數(shù)可以是常量,變量,表達(dá)式
注意:使用數(shù)學(xué)庫(kù)在編譯時(shí)候必須使用 gcc select.c –lm
pow,sqrt為double型
補(bǔ)充:常見(jiàn)數(shù)學(xué)函數(shù)
1.4函數(shù)的執(zhí)行過(guò)程
一旦程序中包含其他函數(shù)的調(diào)用(使用),執(zhí)行到對(duì)應(yīng)的函數(shù)調(diào)用的語(yǔ)句時(shí),跳轉(zhuǎn)到對(duì)應(yīng)的函數(shù)執(zhí)行,執(zhí)行完畢后會(huì)返回調(diào)用的語(yǔ)句的下一條語(yǔ)句繼續(xù)執(zhí)行
具體實(shí)現(xiàn)過(guò)程:
1.5函數(shù)的定義
1.51函數(shù)的定義:函數(shù)的實(shí)現(xiàn),需要我們?cè)O(shè)計(jì)函數(shù)對(duì)應(yīng)的功能,參數(shù),以及返回值
1.52定義的語(yǔ)法:
類(lèi)型標(biāo)識(shí)符 函數(shù)名(形式參數(shù)類(lèi)型說(shuō)明列表)
{
函數(shù)體
}
注:類(lèi)型標(biāo)識(shí)符:說(shuō)明函數(shù)返回值的類(lèi)型
函數(shù)名:符合命令規(guī)則即可,函數(shù)入口地址
形式參數(shù)說(shuō)明列表:函數(shù)執(zhí)行時(shí)需要提供的參數(shù)
函數(shù)體:具體的功能實(shí)現(xiàn)
():函數(shù)的標(biāo)識(shí)
1.53設(shè)計(jì)過(guò)程:
(1)函數(shù)的原型設(shè)計(jì):函數(shù)的名字,參數(shù),返回值的類(lèi)型確定
注意:需要將函數(shù)的原型設(shè)計(jì)寫(xiě)在調(diào)用(使用)之前,為了編譯器對(duì)函數(shù)調(diào)用語(yǔ)句進(jìn)行語(yǔ)法檢查,
例如:int max(int x, int y);
注意:函數(shù)的聲明處需要加分號(hào)
(2)函數(shù)的函數(shù)體的設(shè)計(jì):函數(shù)的名字,參數(shù),返回值類(lèi)型的確定
函數(shù)具體功能的實(shí)現(xiàn)
注意:一個(gè)函數(shù)中,不能嵌套定義另外一個(gè)函數(shù),
完整實(shí)例:
1.6函數(shù)的形式參數(shù)
表示函數(shù)所需要的參數(shù)
形式參數(shù)寫(xiě)在函數(shù)定義與聲明中形式列表中
類(lèi)型標(biāo)識(shí)符 函數(shù)名(類(lèi)型1 參數(shù)名1,類(lèi)型2 參數(shù)名2…..)
每個(gè)形式參數(shù)都必須寫(xiě)參數(shù)名與類(lèi)型
正確寫(xiě)法:int add(int x,int y)
錯(cuò)誤寫(xiě)法:int add(int x,y)
形式參數(shù)一般每變量名
1.7函數(shù)的實(shí)際參數(shù)
表示函數(shù)提供的參數(shù)
實(shí)際參數(shù)是在函數(shù)調(diào)用時(shí)寫(xiě)在括號(hào)中的實(shí)際參數(shù)列表
函數(shù)名(實(shí)際參數(shù)1,實(shí)際參數(shù)2…..)
例如:add(3,4,5)
1.8值傳遞
將實(shí)際參數(shù)的值傳遞給形式參數(shù)
在傳遞值采用一一對(duì)應(yīng)的方式
如:形參1=實(shí)參1 形參2=實(shí)參2….
只能將實(shí)際參數(shù)的值傳遞給形式參數(shù),且只能單向傳遞
實(shí)際參數(shù)與形式參數(shù)之間,保持類(lèi)型、個(gè)數(shù)、順序一致
1.9無(wú)參函數(shù)
沒(méi)有形式參數(shù)的函數(shù),在形式參數(shù)類(lèi)表中使用void表示(標(biāo)準(zhǔn)規(guī)范)
注意:調(diào)用時(shí)候,括號(hào)中不需要寫(xiě)void
實(shí)例:
1.10函數(shù)的返回值
如果一個(gè)函數(shù)需要返回運(yùn)算結(jié)果,使用return關(guān)鍵字
return可以為變量或表達(dá)式或常量
函數(shù)允許沒(méi)有return,正對(duì)沒(méi)有返回值的函數(shù),不能return一個(gè)值,函數(shù)執(zhí)行完畢后,自動(dòng)返回
例如:
注意:return的值原則上需要與聲明的返回值的類(lèi)型保持一致
如果沒(méi)有返回值,就寫(xiě)void
補(bǔ)充:return的作用:1.返回一個(gè)值
終止函數(shù)的執(zhí)行,立即返回
1.11注意及補(bǔ)充
1.變量的作用域:表示一個(gè)變量的作用范圍
變量的生命周期:表示一個(gè)變量在內(nèi)存中存在的時(shí)間
局部變量:一般定義在函數(shù)的內(nèi)部(包括形式參數(shù))
作用域:一般從定義的位置開(kāi)始,到對(duì)應(yīng)的{}結(jié)束
生命周期:從定義的位置開(kāi)始,到超過(guò)作用域之后結(jié)束
從分配空間(定義時(shí))到釋放空間(超過(guò)作用域)的時(shí)間
全局變量:定義在函數(shù)外部
作用域:從定義的位置開(kāi)始,到整個(gè)源文件結(jié)束
生命周期:從定義的位置開(kāi)始,到整個(gè)程序執(zhí)行結(jié)束
補(bǔ)充:程序加載到內(nèi)存中之后,將數(shù)據(jù)分不同的類(lèi)型分開(kāi)存儲(chǔ),不同的區(qū)域存儲(chǔ)不同的類(lèi)型
棧區(qū):存儲(chǔ)局部變量
數(shù)據(jù)區(qū):存儲(chǔ)靜態(tài)變量(使用static int a)
作用:以提高局部變量的生命周期(從定義的位置開(kāi)始,一直到函數(shù)執(zhí)行結(jié)束)但是沒(méi)有改變作用域,且只會(huì)初始化一次,對(duì)應(yīng)的值一直存在
注意:函數(shù)的形式參數(shù)屬于局部變量,不同函數(shù)的形式參數(shù)即使同名,在內(nèi)存空間中是不同的
不同函數(shù)中使用相同名字的局部變量,在內(nèi)存中同樣擁有不同的存儲(chǔ)空間
形式參數(shù)不會(huì)影響實(shí)際參數(shù)
局部變量,靜態(tài)變量,全局變量都是根據(jù)作用域,生命周期來(lái)進(jìn)行區(qū)分
自動(dòng)變量(auto),靜態(tài)變量(static)根據(jù)存儲(chǔ)區(qū)域來(lái)進(jìn)行區(qū)分
默認(rèn)情況變量的存儲(chǔ)類(lèi)型為auto,屬于自動(dòng)局部變量,超過(guò)作用域,生命周期就結(jié)束
√符號(hào)常量:在c語(yǔ)言中使用#define關(guān)鍵字來(lái)定義,提高程序的通用性
使用:#define 符號(hào)標(biāo)識(shí)名 常量值(表達(dá)式)
#define SIZE 5
原理:在預(yù)編譯階段進(jìn)行符號(hào)標(biāo)識(shí)的替換,將程序所有引用的符號(hào)表示替換成后面的值
流程:源程序(test.c)--預(yù)編譯(處理預(yù)處理命令,以#開(kāi)頭)---編譯(c—cpu指令)---匯編---鏈接(test.0,ptintf.o)--可執(zhí)行文件
2. goto 語(yǔ)句:跳轉(zhuǎn)到指定的標(biāo)識(shí)符去執(zhí)行
例子:
3.技巧性:在ubuntu中ctrl+v進(jìn)行選中后,按=可對(duì)齊所選行列
4.應(yīng)用性:計(jì)算二維數(shù)組的行列和時(shí),可使用以下方法
5. bool 類(lèi)型:在c語(yǔ)言中用于表示真和假的類(lèi)型,在內(nèi)存中的值為 1 和 0
使用 true(1) 與 false(0)表示
使用方法:
① 定義頭文件:#include
② 使用函數(shù):
6技巧性:用于顯示重復(fù)的數(shù)字,字母等時(shí),要靈活使用數(shù)組下標(biāo)
具體案例: