C語言編程入門基礎(chǔ)學(xué)習(xí)Do you know 函數(shù)?不知道了吧,來看我就告訴你!

C語言是面向過程的,而C++是面向?qū)ο蟮?/p>

C和C++的區(qū)別:

C是一個(gè)結(jié)構(gòu)化語言,它的重點(diǎn)在于算法和數(shù)據(jù)結(jié)構(gòu)。C程序的設(shè)計(jì)首要考慮的是如何通過一個(gè)過程,對輸入(或環(huán)境條件)進(jìn)行運(yùn)算處理得到輸出(或?qū)崿F(xiàn)過程(事務(wù))控制)。

C++,首要考慮的是如何構(gòu)造一個(gè)對象模型,讓這個(gè)模型能夠契合與之對應(yīng)的問題域,這樣就可以通過獲取對象的狀態(tài)信息得到輸出或?qū)崿F(xiàn)過程(事務(wù))控制。 所以C與C++的最大區(qū)別在于它們的用于解決問題的思想方法不一樣。之所以說C++比C更先進(jìn),是因?yàn)椤?設(shè)計(jì)這個(gè)概念已經(jīng)被融入到C++之中 ”。

C與C++的最大區(qū)別:在于它們的用于解決問題的思想方法不一樣。之所以說C++比C更先進(jìn),是因?yàn)椤?設(shè)計(jì)這個(gè)概念已經(jīng)被融入到C++之中 ”,而就語言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,錯(cuò)!算法是程序設(shè)計(jì)的基礎(chǔ),好的設(shè)計(jì)如果沒有好的算法,一樣不行。而且,“C加上好的設(shè)計(jì)”也能寫出非常好的東西。

函數(shù)

在前面我們已經(jīng)講過了一些簡單的函數(shù),如程序的主函數(shù)main()、標(biāo)準(zhǔn)輸出函數(shù)printf()。在C語言中,大多數(shù)功能都是依靠函數(shù)來實(shí)現(xiàn)的。But,你知道什么是函數(shù)嗎?我猜你肯定不知道。

那么今天我們來仔細(xì)的講解一下什么是函數(shù),函數(shù)的定義、內(nèi)部函數(shù)與外部函數(shù)等相關(guān)知識(shí)。

小編推薦一個(gè)學(xué)C語言/C++的學(xué)習(xí)裙【 六九九,四七零,五九六 】,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!

1 .?函數(shù)的定義

假設(shè)有一個(gè)射擊游戲程序,程序在運(yùn)行過程中,要不斷地發(fā)射子彈打死怪物。Biu!Biu!Biu!假設(shè)發(fā)射子彈的代碼有100行,如果說我每射擊一次就要寫這100行代碼一次,那么可能現(xiàn)在的程序員哥哥都已經(jīng)累死在電腦桌前了。即便沒累死,這樣寫出來的程序也會(huì)從幾十KB變成幾百M(fèi),同時(shí)維護(hù)這些程序代碼的程序員哥哥看到游戲連續(xù)射擊時(shí)代碼量的時(shí)候,也會(huì)果斷的拔出菜刀砍死你。

那該怎么辦呢?為了解決【重復(fù)編寫代碼】這個(gè)問題,我們可以把發(fā)射子彈這部分的代碼給單獨(dú)拿出來放在一個(gè){}中,并為這段代碼起個(gè)名字。這樣,每次我們需要發(fā)射子彈的時(shí)候,通過這個(gè)名字來調(diào)用發(fā)射子彈的代碼塊就可以了,而不是發(fā)射一次就編寫一次射擊動(dòng)作。是不是感到很驚奇?

而這上面我們所提取并組合起來的代碼塊可以被看作是程序中自己定義的一個(gè)函數(shù),玩游戲時(shí),在需要發(fā)射子彈的地方調(diào)用這個(gè)函數(shù)就可以了。

在C語言中,定義一個(gè)函數(shù)的具體語法格式如下:

返回值類型函數(shù)名([[參數(shù)類型參數(shù)名1],[參數(shù)類型參數(shù)名2],……,[參數(shù)類型 參數(shù)n]])

{

執(zhí)行語句

………

return 返回值;

}

l 返回值類型:用于限定函數(shù)返回值的數(shù)據(jù)類型;

l 函數(shù)名:表示函數(shù)的名稱,該名稱可以根據(jù)標(biāo)識(shí)符命名規(guī)范來定義;

l 參數(shù)類型:用于限定調(diào)用方法時(shí)傳入?yún)?shù)的數(shù)據(jù)類型;

l 參數(shù)名:用于接收調(diào)用方法時(shí)傳入的數(shù)據(jù);

l return關(guān)鍵字:用于結(jié)束函數(shù),并返回函數(shù)指定類型的值;

l 返回值:被return語句返回的值,該值會(huì)返回給調(diào)用者。如果函數(shù)沒有返回值,則返回值類型要聲明為void,此時(shí),函數(shù)體中的return語句可以省略不寫。

在上面的語法格式中,函數(shù)中的“[[參數(shù)類型參數(shù)名1],[參數(shù)類型參數(shù)名2],…,[參數(shù)類型 參數(shù)n]]”被稱作參數(shù)列表,它主要是用來描述函數(shù)在被調(diào)用時(shí)需要接收的參數(shù)。如果你的函數(shù)不需要接收任何參數(shù),那么設(shè)置參數(shù)列表為空就好了,這樣的函數(shù)被稱為無參函數(shù)。相反地,參數(shù)列表不為空的函數(shù)就是有參函數(shù)。接下來分別講解這兩種函數(shù)。

1、無參函數(shù)

在C語言中,無參函數(shù)的定義很簡單,先來看一個(gè)定義無參函數(shù)的示例代碼,具體如下:

void func()

{

printf("這是我的第一個(gè)函數(shù)! ");

}

在這個(gè)示例代碼中,func()函數(shù)就是一個(gè)無參函數(shù),在定義時(shí)參數(shù)列表為空。要想執(zhí)行這個(gè)函數(shù),需要在main()函數(shù)中調(diào)用它。

案例1:

1 #include

1 void func(int x, int y)

2 {

3 int sum = x + y;

4 printf("x+y=%d ", sum);

5 }

6 void main()

7 {

8 func(3, 5);

9 }

運(yùn)行結(jié)果:

在這個(gè)程序中,第2~6行代碼定義了一個(gè)函數(shù)func(),這個(gè)函數(shù)包含兩個(gè)參數(shù),分別是x和y。當(dāng)在main()函數(shù)中調(diào)用func()函數(shù)時(shí),由于傳入的參數(shù)是3和5,因此,程序打印的結(jié)果為“x+y=8”。下面通過一張圖來描述func()函數(shù)的調(diào)用過程。

小編推薦一個(gè)學(xué)C語言/C++的學(xué)習(xí)裙【 六九九,四七零,五九六 】,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!

從圖中可以看出,有參函數(shù)和無參函數(shù)的調(diào)用過程類似,只不過在調(diào)用有參函數(shù)時(shí),需要傳入實(shí)參,并將傳入的實(shí)參賦值給形參,然后在函數(shù)體中執(zhí)行x+y操作,最終將結(jié)果輸出到控制臺(tái)。

值得一提的是,在定義有參函數(shù)時(shí)指定的參數(shù)x和y是形式參數(shù),簡稱形參,它們只在形式上存在,并不是真正存在的參數(shù)。調(diào)用函數(shù)時(shí)傳入的參數(shù)(如案例中的3和5)是實(shí)際參數(shù),簡稱實(shí)參,與形參相對,實(shí)參則是指實(shí)際存在的參數(shù)。

2 .?函數(shù)的返回值

了解了函數(shù)之后我們會(huì)發(fā)現(xiàn),其實(shí)函數(shù)的返回值是指函數(shù)被調(diào)用之后,返回給調(diào)用者的值。

函數(shù)返回值的具體語法格式如下:

return 表達(dá)式;

對于返回值為空的函數(shù),可以直接在return語句后面加分號(hào),具體語法格式如下:

return;

為了讓大家更好的理解如何使用return語句,接下來對案例1進(jìn)行改寫,使func(int x, int y)函數(shù)能夠返回求和計(jì)算的結(jié)果。

案例2:

1 #include

10 int func(int x, int y)

11 {

12 int sum = x + y;

13 return sum;

14 }

15 void main()

16 {

17 int sum = func(3, 5);

18 printf("x+y=%d ", sum);

19 }

運(yùn)行結(jié)果:

從圖中可以看出,案例1與案例2實(shí)現(xiàn)了同樣的功能。接下來通過一個(gè)圖例來演示func()函數(shù)的整個(gè)調(diào)用過程以及return語句的返回過程,如下圖所示。

小編推薦一個(gè)學(xué)C語言/C++的學(xué)習(xí)裙【 六九九,四七零,五九六 】,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!

從圖中可以看出,在程序運(yùn)行期間,參數(shù)x和y相當(dāng)于在內(nèi)存中定義的兩個(gè)變量。當(dāng)調(diào)用func(int x,int y)函數(shù)時(shí),傳入的參數(shù)3和5分別賦值給變量x和y,并將x+y的結(jié)果通過return語句返回,整個(gè)方法的調(diào)用過程結(jié)束,變量x和y被釋放。

需要注意的是,return后面表達(dá)式的類型和函數(shù)定義返回值的類型應(yīng)保持一致。如果不一致,就有可能會(huì)報(bào)錯(cuò)。如果函數(shù)沒有返回值,返回值類型要聲明為void。為了保證程序的可讀性和邏輯性,沒有返回值的函數(shù)都應(yīng)定義為void。

這些是C/C++能做的

服務(wù)器開發(fā)工程師、人工智能、云計(jì)算工程師、信息安全(黑客反黑客)、大數(shù)據(jù) 、數(shù)據(jù)平臺(tái)、嵌入式工程師、流媒體服務(wù)器、數(shù)據(jù)控解、圖像處理、音頻視頻開發(fā)工程師、游戲服務(wù)器、分布式系統(tǒng)、游戲輔助等

生活不止眼前的茍且,還有到不了的遠(yuǎn)方和讀不完的詩!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容