C語言是面向過程的,而C++是面向?qū)ο蟮?/p>
C和C++的區(qū)別:
C是一個結(jié)構(gòu)化語言,它的重點(diǎn)在于算法和數(shù)據(jù)結(jié)構(gòu)。C程序的設(shè)計首要考慮的是如何通過一個過程,對輸入(或環(huán)境條件)進(jìn)行運(yùn)算處理得到輸出(或?qū)崿F(xiàn)過程(事務(wù))控制)。
C++,首要考慮的是如何構(gòu)造一個對象模型,讓這個模型能夠契合與之對應(yīng)的問題域,這樣就可以通過獲取對象的狀態(tài)信息得到輸出或?qū)崿F(xiàn)過程(事務(wù))控制。 所以C與C++的最大區(qū)別在于它們的用于解決問題的思想方法不一樣。之所以說C++比C更先進(jìn),是因?yàn)椤?設(shè)計這個概念已經(jīng)被融入到C++之中 ”。
C與C++的最大區(qū)別:在于它們的用于解決問題的思想方法不一樣。之所以說C++比C更先進(jìn),是因?yàn)椤?設(shè)計這個概念已經(jīng)被融入到C++之中 ”,而就語言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,錯!算法是程序設(shè)計的基礎(chǔ),好的設(shè)計如果沒有好的算法,一樣不行。而且,“C加上好的設(shè)計”也能寫出非常好的東西。

這次與大家分享的是我對 C 語言中函數(shù)使用注意事項(xiàng)的小短文,希望能幫助有疑惑的同學(xué)更好的使用這個強(qiáng)大的語言特性。
大家在高中的時候都求過數(shù)學(xué)函數(shù)的表達(dá)式,其實(shí)編程語言的函數(shù)與數(shù)學(xué)表達(dá)式實(shí)際上是一樣的。
我們都可以將其理解為一個有輸入有輸出的「功能黑箱」,看下圖:
就類似給函數(shù)一個 x 值,可以求結(jié)果一樣,給函數(shù)一些輸入?yún)?shù),也可以得到相同的輸出結(jié)果。

小編推薦一個學(xué)C語言/C++的學(xué)習(xí)裙【 七三零,一三零,二二一 】,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!
1. 模塊化編程
為什么要使用函數(shù)呢?其實(shí)是為了更好的維護(hù)軟件的功能以及實(shí)現(xiàn)模塊化編程。
你可以想下如果把所有的功能都寫在 main 函數(shù)中,那該多么可怕,估計沒人會讀你寫的代碼。
通過使用函數(shù)可以使我們的軟件邏輯性更強(qiáng),單獨(dú)的功能寫在單獨(dú)的函數(shù)中,還可以方便后期復(fù)用等等,好處還有很多實(shí)在列舉不完。
其中比較重要的作用要說:模塊化編程和代碼復(fù)用了,建議你去找實(shí)際的項(xiàng)目看看代碼組成,自然就理解了。
2. 函數(shù)的副本機(jī)制
很多初學(xué)者都搞不清楚函數(shù)的副本機(jī)制,例如下面的交換函數(shù):
這個函數(shù)是錯誤的,因?yàn)楹瘮?shù)在進(jìn)行參數(shù)傳遞的時候,會將傳入?yún)?shù) m,n 的值拷貝給函數(shù)的形式參數(shù) a,b。
因此在函數(shù)內(nèi)部交換的是形式參數(shù) a,b 的值,而不是交換傳遞時 m,n 變量的值。
函數(shù)的副本機(jī)制從內(nèi)存的角度來說就是:在函數(shù)進(jìn)行參數(shù)傳遞的時候,實(shí)參和形參的內(nèi)存地址是不同的。
這是這個例子的輸出結(jié)果,每個人的機(jī)器可能都不同:
可以看到變量 m 和 a,以及 n 和 b 的內(nèi)存地址均不同,因此對值的交換也是不起作用的。
但是使用指針就完全不同了,看下面這個例子:
小編推薦一個學(xué)C語言/C++的學(xué)習(xí)裙【 七三零,一三零,二二一 】,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!
這個函數(shù)才是正確的交換函數(shù),為什么呢?
因?yàn)槲覀冞@里傳遞的是 m,n 的內(nèi)存地址,即傳遞的是指針,所以在函數(shù)內(nèi)部對指針解除引用就可以直接訪問這個地址的內(nèi)容了,這是指針提供的特性。
那么是否就意為著傳遞指針就沒有副本機(jī)制了呢?這也是錯誤的,指針也是變量,本質(zhì)上與 int 沒有區(qū)別,只是特性不同罷了。
上面例子在傳遞指針的時候,也是將 m,n 的地址拷貝給 pa,和 pb,也是存在副本機(jī)制的。
只不過這里拷貝的是地址而不是值,在內(nèi)部通過指針的解引用操作可以直接訪問 m,n 的內(nèi)存地址,進(jìn)而進(jìn)行交換。
因?yàn)橹羔樂浅V匾越ㄗh你自己運(yùn)行這個程序,可以看到輸出結(jié)果中 pa 指向的是 m 的內(nèi)存地址,而 &pa 是指針變量 pa 的內(nèi)存地址,這兩個千萬不要搞混了。
一定時時刻刻記住下面的結(jié)論:
1. 一個 int 變量有自己的內(nèi)存地址,也有自己存儲的整數(shù)值
2. 一個指針變量有自己的內(nèi)存地址,也有自己存儲的指向地址值
3. 變量在內(nèi)存中都有自己的地址和其存儲的內(nèi)容
3. 函數(shù)的參數(shù)傳遞順序
VC 和 gcc 編譯器計算函數(shù)參數(shù)的順序都是從右向左,這個特點(diǎn)一點(diǎn)要記住,面試可能會問到。
你可以使用下面這個程序去驗(yàn)證,程序比較簡單,留作給你的思考(不去思考就等于浪費(fèi)時間看 cd 這篇文章了):
小編推薦一個學(xué)C語言/C++的學(xué)習(xí)裙【 七三零,一三零,二二一 】,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!
好了,今天就到這里。
寫在最后
編程最重要的練,重復(fù)寫。
這些是C/C++能做的
服務(wù)器開發(fā)工程師、人工智能、云計算工程師、信息安全(黑客反黑客)、大數(shù)據(jù) 、數(shù)據(jù)平臺、嵌入式工程師、流媒體服務(wù)器、數(shù)據(jù)控解、圖像處理、音頻視頻開發(fā)工程師、游戲服務(wù)器、分布式系統(tǒng)、游戲輔助等


