新手入門C語言編程:使用函數(shù)必須知道的三點注意事項!

C是一個結構化語言,它的重點在于算法和數(shù)據(jù)結構。C程序的設計首要考慮的是如何通過一個過程,對輸入(或環(huán)境條件)進行運算處理得到輸出(或實現(xiàn)過程(事務)控制)。

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

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

C 語言中函數(shù)使用的注意事項,你們知道嗎?希望能幫助有疑惑的同學更好的使用這個強大的語言特性。

大家在高中的時候都求過數(shù)學函數(shù)的表達式,其實編程語言的函數(shù)與數(shù)學表達式實際上是一樣的。

我們都可以將其理解為一個有輸入有輸出的「功能黑箱」,看下圖:

就類似給函數(shù)一個 x 值,可以求結果一樣,給函數(shù)一些輸入?yún)?shù),也可以得到相同的輸出結果。

1.?模塊化編程

為什么要使用函數(shù)呢?其實是為了更好的維護軟件的功能以及實現(xiàn)模塊化編程。

你可以想下如果把所有的功能都寫在 main 函數(shù)中,那該多么可怕,估計沒人會讀你寫的代碼。

通過使用函數(shù)可以使我們的軟件邏輯性更強,單獨的功能寫在單獨的函數(shù)中,還可以方便后期復用等等,好處還有很多實在列舉不完。

其中比較重要的作用要說:模塊化編程和代碼復用了,建議你去找實際的項目看看代碼組成,自然就理解了。

2.?函數(shù)的副本機制

很多初學者都搞不清楚函數(shù)的副本機制,例如下面的交換函數(shù):小編推薦一個學C語言/C++的學習裙【 六二七,零一二,四六四 】,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發(fā)工具,很多干貨和技術資料分享!

這個函數(shù)是錯誤的,因為函數(shù)在進行參數(shù)傳遞的時候,會將傳入?yún)?shù) m,n 的值拷貝給函數(shù)的形式參數(shù) a,b。

因此在函數(shù)內部交換的是形式參數(shù) a,b 的值,而不是交換傳遞時 m,n 變量的值。

函數(shù)的副本機制從內存的角度來說就是:在函數(shù)進行參數(shù)傳遞的時候,實參和形參的內存地址是不同的。

這是這個例子的輸出結果,每個人的機器可能都不同:

可以看到變量 m 和 a,以及 n 和 b 的內存地址均不同,因此對值的交換也是不起作用的。

但是使用指針就完全不同了,看下面這個例子:

這個函數(shù)才是正確的交換函數(shù),為什么呢?

因為我們這里傳遞的是 m,n 的內存地址,即傳遞的是指針,所以在函數(shù)內部對指針解除引用就可以直接訪問這個地址的內容了,這是指針提供的特性。

那么是否就意為著傳遞指針就沒有副本機制了呢?這也是錯誤的,指針也是變量,本質上與 int 沒有區(qū)別,只是特性不同罷了。

上面例子在傳遞指針的時候,也是將 m,n 的地址拷貝給 pa,和 pb,也是存在副本機制的。

只不過這里拷貝的是地址而不是值,在內部通過指針的解引用操作可以直接訪問 m,n 的內存地址,進而進行交換。

因為指針非常重要,所以建議你自己運行這個程序,可以看到輸出結果中 pa 指向的是 m 的內存地址,而 &pa 是指針變量?pa 的內存地址,這兩個千萬不要搞混了。小編推薦一個學C語言/C++的學習裙【 六二七,零一二,四六四 】,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發(fā)工具,很多干貨和技術資料分享!

一定時時刻刻記住下面的結論:

1. 一個 int 變量有自己的內存地址,也有自己存儲的整數(shù)值

2. 一個指針變量有自己的內存地址,也有自己存儲的指向地址值

3. 變量在內存中都有自己的地址和其存儲的內容

3.?函數(shù)的參數(shù)傳遞順序

VC 和?gcc?編譯器計算函數(shù)參數(shù)的順序都是從右向左,這個特點一點要記住,面試可能會問到。

你可以使用下面這個程序去驗證,程序比較簡單,留作給你的思考(不去思考就等于浪費時間看 cd 這篇文章了):

編程最重要的練,重復寫,寫到自己得心應手,滾瓜爛熟,就像刻在心里了一樣,這就是達到了一種境界,小編我還沒有達到這種境界,因為人有惰性,希望你們可以克服,可以達到最高境界!

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容