當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 學習筆記 > 嵌(qian)入(ru)(ru)式(shi)學(xue)習筆記(ji):函數入(ru)(ru)門知(zhi)識總(zong)結(jie)
嵌入式學習筆記(ji):函數入門知識總結(jie)
時間:2018-09-13 來源:未知
函數的意義
函數(shu)是一段程序(xu),可(ke)以完(wan)成一個(ge)功能(neng),例(li)如:printf
提高(gao)程(cheng)序(xu)的(de)通(tong)用性,減少重復的(de)代碼(ma)(具有(you)相似(si)功能的(de)代碼(ma))
實現(xian)模(mo)塊化設計的基礎
1.2函(han)數的(de)分類
main()函數(shu)(shu)(shu),每個程序都必須要實現的(de),程序從main()函數(shu)(shu)(shu)開始執行,從main()函數(shu)(shu)(shu)結束
庫函數:由系(xi)統(tong)已經(jing)實(shi)現(xian)的函數,例如:printf
自定義函數:用戶自行(xing)設計(ji)并實現
1.3函數的使用(yong)
以math(數(shu)學庫(ku))為例(li),用man math.h查看庫(ku)中(zhong)函數(shu)
注(zhu)意:必須有頭文件:#include
例子1:pow()
函數功能:計算x的(de)y次方,可(ke)使(shi)用man pow可(ke)查(cha)看pow()函數的(de)使(shi)用方法
函數模型(xing):double pow(double x,double y)
提(ti)供的(de)信息:需要(yao)的(de)參(can)數(shu),返回的(de)結果的(de)類型(xing)
使(shi)用(yong)函數的(de)語法:函數名(參數列表)
實際情況

例子2:sqrt()
函數的功能:計(ji)算一個(ge)數的平方根
函數原型(xing):double sqrt() //
提(ti)供的信(xin)息(xi):需要提(ti)供一(yi)個double類型的參數
使(shi)用函數提(ti)供的(de)參數可以是(shi)常量,變量,表達式
注意:使用(yong)數學庫(ku)在編(bian)譯時候(hou)必須使用(yong) gcc select.c –lm
pow,sqrt為double型
補充:常見數學函數

1.4函數的執行過(guo)程
一旦程序中(zhong)包含其(qi)他函數(shu)的調用(yong)(使用(yong)),執行(xing)到對應(ying)的函數(shu)調用(yong)的語(yu)(yu)句時(shi),跳轉(zhuan)到對應(ying)的函數(shu)執行(xing),執行(xing)完(wan)畢(bi)后會返回調用(yong)的語(yu)(yu)句的下一條語(yu)(yu)句繼續執行(xing)
具(ju)體實現過程(cheng):

1.5函數的定義
1.51函數的(de)定義:函數的(de)實現,需要我們(men)設計(ji)函數對(dui)應(ying)的(de)功能,參數,以及返回值
1.52定義的語法:
類型(xing)(xing)標識(shi)符 函數名(形(xing)式參(can)數類型(xing)(xing)說明列表)
{
函數體
}
注:類型標識符:說(shuo)明函數返回(hui)值(zhi)的類型
函數名:符合命(ming)令(ling)規則即可,函數入口地址
形式參數(shu)說明列表:函(han)數(shu)執行時需要提供的參數(shu)
函數體:具體的(de)功(gong)能(neng)實現(xian)
():函數的標識
1.53設計(ji)過程(cheng):
(1)函數的(de)(de)原型設計:函數的(de)(de)名字(zi),參數,返回值(zhi)的(de)(de)類(lei)型確定
注意:需要將函(han)數(shu)的原型設計寫在調用(使用)之前,為(wei)了編譯器對函(han)數(shu)調用語句(ju)進行語法(fa)檢(jian)查,
例如:int max(int x, int y);
注意:函數(shu)的聲明處(chu)需要加分號
(2)函數(shu)(shu)的函數(shu)(shu)體的設計:函數(shu)(shu)的名(ming)字(zi),參數(shu)(shu),返回(hui)值類型的確定
函(han)數具體功(gong)能的實現
注(zhu)意:一個函(han)數(shu)中,不能嵌(qian)套定(ding)義另外一個函(han)數(shu),
完整實例:

1.6函數的形式參數
表(biao)示函數所需要的參數
形式(shi)參數寫在函數定義與聲(sheng)明中形式(shi)列表中
類型標(biao)識(shi)符 函數名(類型1 參數名1,類型2 參數名2…..)
每個形式參數(shu)都必須寫(xie)參數(shu)名與類型
正確寫(xie)法(fa):int add(int x,int y)
錯誤寫法:int add(int x,y)
形式參數一般每變量名
1.7函(han)數的實際參數
表示函數提供的(de)參數
實際參數是在(zai)函數調用時寫(xie)在(zai)括號中(zhong)的實際參數列(lie)表(biao)
函數名(實際參(can)數1,實際參(can)數2…..)
例(li)如:add(3,4,5)
1.8值(zhi)傳(chuan)遞
將實際參數(shu)(shu)的值傳(chuan)遞(di)給形(xing)式參數(shu)(shu)
在傳遞值采用一一對(dui)應的方(fang)式
如:形(xing)參1=實參1 形(xing)參2=實參2….
只能將實際(ji)參(can)數的值傳(chuan)遞給形式參(can)數,且只能單(dan)向傳(chuan)遞
實際參數與形式參數之間(jian),保持類(lei)型(xing)、個數、順序一(yi)致
1.9無參函(han)數
沒有(you)形式參數(shu)的函數(shu),在形式參數(shu)類表中使用(yong)void表示(標(biao)準規范)
注意:調用時候,括號中不需要寫void
實例:

1.10函(han)數的返回值
如果一個(ge)函數需要返回運算結果,使用return關鍵字
return可(ke)以(yi)為變量或表(biao)達式或常量
函數允(yun)許沒有(you)return,正對沒有(you)返回值的(de)函數,不能(neng)return一個值,函數執(zhi)行完畢后(hou),自(zi)動返回
例如:

注意:return的值原則上需要與聲明的返回值的類型保(bao)持(chi)一致
如果(guo)沒(mei)有(you)返(fan)回值,就寫void

補充:return的作(zuo)用:1.返回(hui)一個值(zhi)
終止(zhi)函數的執行,立即返回
1.11注意及補充
1.變量(liang)的作(zuo)用(yong)域(yu):表(biao)示一個(ge)變量(liang)的作(zuo)用(yong)范圍(wei)
變(bian)量的生命周期:表示(shi)一個(ge)變(bian)量在內存(cun)中存(cun)在的時(shi)間(jian)
局部變量:一般定(ding)義在函數的內部(包(bao)括形式參數)
作(zuo)用域(yu):一(yi)般從定(ding)義的位置開始(shi),到對(dui)應(ying)的{}結(jie)束
生命周期:從定義的位(wei)置開(kai)始(shi),到(dao)超過(guo)作(zuo)用域之后(hou)結束(shu)
從分配(pei)空間(定義時)到釋放空間(超(chao)過作用域)的時間
全(quan)局變量:定義在函數外部
作用域(yu):從定義的位置(zhi)開始(shi),到整個源文件結(jie)束(shu)
生命周期:從(cong)定義的位置(zhi)開始,到整(zheng)個程序執行結束
補充:程(cheng)序(xu)加載到(dao)內存(cun)(cun)中(zhong)之后,將數據分不(bu)(bu)同的類型(xing)(xing)分開存(cun)(cun)儲(chu),不(bu)(bu)同的區域存(cun)(cun)儲(chu)不(bu)(bu)同的類型(xing)(xing)
棧區(qu):存儲局部(bu)變量
數據區:存儲靜態變(bian)量(使(shi)用(yong)static int a)
作用(yong)(yong):以(yi)提高局部變(bian)量(liang)的(de)(de)生命(ming)周期(qi)(從(cong)定義的(de)(de)位置開(kai)始(shi),一直到(dao)函數執行(xing)結束)但(dan)是沒(mei)有改變(bian)作用(yong)(yong)域,且(qie)只會初(chu)始(shi)化一次,對應的(de)(de)值(zhi)一直存在
注意:函(han)數(shu)(shu)的形式參數(shu)(shu)屬于(yu)局部變(bian)量,不同(tong)函(han)數(shu)(shu)的形式參數(shu)(shu)即使同(tong)名,在內存(cun)空間中是(shi)不同(tong)的
不(bu)同函(han)數中使(shi)用相同名字的(de)局部變量(liang),在內(nei)存中同樣擁有不(bu)同的(de)存儲空(kong)間
形式參數(shu)不會(hui)影(ying)響實際(ji)參數(shu)
局(ju)部變量(liang),靜態變量(liang),全局(ju)變量(liang)都是根據作(zuo)用域,生命周期來進(jin)行區分
自(zi)動變量(auto),靜態變量(static)根據存儲區域來進行區分
默(mo)認情(qing)況變(bian)(bian)量的(de)存儲類型為auto,屬于自動(dong)局部變(bian)(bian)量,超過作(zuo)用域,生命周期就(jiu)結束
√符號常量:在(zai)c語言中使用#define關(guan)鍵字來(lai)定義,提高(gao)程序的通用性
使用:#define 符號標(biao)識名 常量值(表達式)
#define SIZE 5
原理:在預編譯(yi)階段進行(xing)符(fu)號標識的替換(huan),將程序所有引用的符(fu)號表示替換(huan)成后面的值
流程(cheng):源程(cheng)序(test.c)--預編(bian)(bian)(bian)譯(處(chu)理(li)預處(chu)理(li)命令,以(yi)#開頭)---編(bian)(bian)(bian)譯(c—cpu指令)---匯(hui)編(bian)(bian)(bian)---鏈接(test.0,ptintf.o)--可執(zhi)行文件(jian)
2. goto 語句:跳轉(zhuan)到指定的(de)標識符去(qu)執行
例子:

3.技巧性:在ubuntu中(zhong)ctrl+v進行選(xuan)中(zhong)后,按=可對(dui)齊所選(xuan)行列(lie)
4.應用性(xing):計(ji)算(suan)二維數(shu)組的(de)行(xing)列和時,可使用以下方(fang)法

5. bool 類型(xing):在c語言中用于表(biao)示真和假的類型(xing),在內存中的值為 1 和 0
使用(yong) true(1) 與 false(0)表(biao)示
使用方法:
① 定義頭文件:#include
② 使用函數:

6技巧性:用(yong)于(yu)顯示重復的數字,字母(mu)等(deng)時,要靈活使(shi)用(yong)數組下標
具體案例:





