柚子快報激活碼778899分享:后端 C語言——函數(shù)
1.函數(shù)的概念?
? ? C語?中的函數(shù)就是?個完成某項特定的任務(wù)的??段代碼。這段代碼是有特殊的寫法和調(diào)??法的。 C語?的程序其實是由?數(shù)個?的函數(shù)組合?成的,也可以說:?個?的計算任務(wù)可以分解成若?個較 ?的函數(shù)(對應(yīng)較?的任務(wù))完成。同時?個函數(shù)如果能完成某項特定任務(wù)的話,這個函數(shù)也是可以 復(fù)?的,提升了開發(fā)軟件的效率。
在C語?中我們?般會?到兩類函數(shù):
?
庫函數(shù)
?
?定義函數(shù)
2.庫函數(shù)
? ??C語?標準中規(guī)定了C語?的各種語法規(guī)則,C語?并不提供庫函數(shù);C語?的國際標準ANSI C規(guī)定了? 些常?的函數(shù)的標準,被稱為標準庫,那不同的編譯器?商根據(jù)ANSI提供的C語?標準就給出了?系列 函數(shù)的實現(xiàn)。這些函數(shù)就被稱為庫函數(shù)。
? ?有了庫函數(shù),?些常?的功能就不需要程序員??實現(xiàn)了,?定程度提升了效率;同時庫函數(shù)的質(zhì)量和執(zhí)?效率上都更有保證。
庫函數(shù)相關(guān)頭?件:https://zh.cppreference.com/w/c/header
? ?庫函數(shù)的學(xué)習(xí)不用一次性學(xué)完,慢慢學(xué)習(xí),逐個擊破就好了。
? ?庫函數(shù)是在標準庫中對應(yīng)的頭?件中聲明的,所以庫函數(shù)的使?,務(wù)必包含對應(yīng)的頭?件,不包含是可能會出現(xiàn)?些問題的。
?
3.函數(shù)語法形式
??
? ? 我們可以將函數(shù)想象成一個小型加工廠,工廠得輸入原料?,經(jīng)過加工才能生產(chǎn)出產(chǎn)品,函數(shù)也是一樣的,函數(shù)一般會輸入一些值,經(jīng)過函數(shù)內(nèi)的計算,得到想要的結(jié)果。
? ? 1是用來表示函數(shù)的返回類型,有時候返回類型是void,表示什么也不返回。
? ? 2是為了方便使用函數(shù),就像人的名字一樣。
? ? 3函數(shù)的參數(shù)就相當于送到工廠的原材料,函數(shù)的參數(shù)也可以是void。
? ? 4函數(shù)體就相當于工廠的加工過程。
4.形參和實參?
實參:傳遞給函數(shù)的參數(shù)a和b,稱為實際參數(shù),簡稱實參。 實際參數(shù)就是真實傳遞給函數(shù)的參數(shù)。
形參:?Add 函數(shù)的參數(shù) x和 y 只是形式上存在的,不會向內(nèi)存申請空間,不會真實存在的,所以叫形式參數(shù)。形式參數(shù)只有在 函數(shù)被調(diào)?的過程中為了存放實參傳遞過來的值,才向內(nèi)存申請空間,這個過程就是形參的實例化。
形參是實參的一份臨時拷貝;
5.return語句
在函數(shù)的設(shè)計中,函數(shù)中經(jīng)常會出現(xiàn)return語句,這?講?下return語句使?的注意事項。
?
return后邊可以是?個數(shù)值,也可以是?個表達式,如果是表達式則先執(zhí)?表達式,再返回表達式
的結(jié)果。
?
return后邊也可以什么都沒有,直接寫 return; 這種寫法適合函數(shù)返回類型是void的情況。
?
return返回的值和函數(shù)返回類型不?致,系統(tǒng)會?動將返回的值隱式轉(zhuǎn)換為函數(shù)的返回類型。
?
return語句執(zhí)?后,函數(shù)就徹底返回,后邊的代碼不再執(zhí)?。
?
如果函數(shù)中存在if等分?的語句,則要保證每種情況下都有return返回,否則會出現(xiàn)編譯錯誤。
?
6.數(shù)組做函數(shù)參數(shù)
?
在使?函數(shù)解決問題的時候,難免會將數(shù)組作為參數(shù)傳遞給函數(shù),在函數(shù)內(nèi)部對數(shù)組進?操作。
?如:寫?個函數(shù)將?個整型數(shù)組的內(nèi)容,全部置為-1,再寫?個函數(shù)打印數(shù)組的內(nèi)容。
簡單思考?下,基本的形式應(yīng)該是這樣的:
?
函數(shù)的形式參數(shù)要和函數(shù)的實參個數(shù)匹配
?
函數(shù)的實參是數(shù)組,形參也是可以寫成數(shù)組形式的
?
形參如果是?維數(shù)組,數(shù)組??可以省略不寫
?
形參如果是?維數(shù)組,?可以省略,但是列不能省略
?
數(shù)組傳參,形參是不會創(chuàng)建新的數(shù)組的
?
形參操作的數(shù)組和實參的數(shù)組是同?個數(shù)組
?7. 嵌套調(diào)用和鏈式訪問
1.嵌套調(diào)用
嵌套調(diào)?就是函數(shù)之間的互相調(diào)?,每個函數(shù)就像?個樂?零件,正是因為多個樂?的零件互相?縫的配合才能搭建出精美的樂?玩具,也正是因為函數(shù)之間有效的互相調(diào)?,最后寫出來了相對?型的程序;
2.鏈式訪問
所謂鏈式訪問就是將?個函數(shù)的返回值作為另外?個函數(shù)的參數(shù),像鏈條?樣將函數(shù)串起來就是函數(shù)的鏈式訪問
8. 函數(shù)的聲明和定義?
1.單個文件
報錯的原因是因為C語言編譯器對源代碼進行編譯時,是從上往下掃描的,掃到函數(shù)調(diào)用的時候,并沒有發(fā)現(xiàn)函數(shù)的定義,這個時候我們只需要給函數(shù)進行聲明就可以使用了;
2.多個文件
?般在企業(yè)中我們寫代碼時候,代碼可能?較多,不會將所有的代碼都放在?個?件中;我們往往會 根據(jù)程序的功能,將代碼拆分放在多個?件中。 ?般情況下,函數(shù)的聲明、類型的聲明放在頭?件(.h)中,函數(shù)的實現(xiàn)是放在源?件(.c)?件中。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
add.h
//
函數(shù)的聲明
int Add(int x, int y);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?add.c
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //
函數(shù)的定義
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?int Add(int x, int y)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?return x+y;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}
?
?
test.c
#include
#include "add.h"
int main()
{
?
int a = 10;
int b = 20;
//
函數(shù)調(diào)?
int c = Add(a, b);
printf("%d\n", c);
return 0;
}
?
3.static 和 extern
?
? ?static可以修飾:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?局部變量
? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?全局變量
? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?函數(shù)
? ?1.修飾局部變量
?
? 代碼1的test函數(shù)中的局部變量i是每次進?test函數(shù)先創(chuàng)建變量(?命周期開始)并賦值為0,然后
++,再打印,出函數(shù)的時候變量?命周期將要結(jié)束(釋放內(nèi)存)。
? 代碼2中,我們從輸出結(jié)果來看,i的值有累加的效果,其實 test函數(shù)中的i創(chuàng)建好后,出函數(shù)的時候是 不會銷毀的,重新進?函數(shù)也就不會重新創(chuàng)建變量,直接上次累積的數(shù)值繼續(xù)計算。
? 結(jié)論:static修飾局部變量改變了變量的?命周期,?命周期改變的本質(zhì)是改變了變量的存儲類型,本 來?個局部變量是存儲在內(nèi)存的棧區(qū)的,但是被 static 修飾后存儲到了靜態(tài)區(qū)。存儲在靜態(tài)區(qū)的變 量和全局變量是?樣的,?命周期就和程序的?命周期?樣了,只有程序結(jié)束,變量才銷毀,內(nèi)存才 回收。但是作?域不變的。
??
?
? 2.修飾全局變量(直接上結(jié)論吧)
? ?
結(jié)論:
? ? ? ?個全局變量被static修飾,使得這個全局變量只能在本源?件內(nèi)使?,不能在其他源?件內(nèi)?。 本質(zhì)原因是全局變量默認是具有外部鏈接屬性的,在外部的?件中想使?,只要適當?shù)穆暶骶涂梢允??;但是全局變量被 static 修飾之后,外部鏈接屬性就變成了內(nèi)部鏈接屬性,只能在??所在的源文件的內(nèi)部使用,即使其他源文件聲明了也無法使用。
?
4.extern
?
? ?extern 是?來聲明外部符號的,如果?個全局的符號在A?件中定義的,在B?件中想使?,就可以使 ? extern 進?聲明,然后使?。
?
?
柚子快報激活碼778899分享:后端 C語言——函數(shù)
推薦閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。