Linux C語言高階學習第四天(C高階-函式)
函式(very重點)
一、概念
一段用來執行某個功能的程式碼-->給你一個值,你處理完之後,再給我一個值。
※編寫程式碼時,一定要清楚你需要實現的功能是什麼?針對於功能設計出函式。
二、為什麼要使用函式
1)避免使主函式main()變得複雜,邏輯混亂
2)避免程式冗長、不精煉;
3)如果需要多次實現某些功能,不使用函式的話則需要重複的話工作量大
--->模組化程式設計
模組化程式設計的特點:高聚合、低耦合-->給一段功能程式碼解耦能體現出你的能力
功能模組:一個或幾個具有特定功能函式構成的程式碼
三、函式定義與使用
函式需要先定義再使用
1、函式的定義
函式四大要素
1.函式名:函式功能程式碼的識別符號;呼叫函式的依據;函式名是函式的首地址(指標那塊細說)
1)函式命名方式:
(1)大駝峰法:函式名內所有單詞首字母大寫
eg.SetStudentName
用於Windows系統
(2)下劃線法:函式名內所有單詞全都小寫,單詞之間以下劃線分割
eg.set_student_name
用於Linux系統
(3)小駝峰法:函式名內第一個單詞全小寫,其餘單詞首字母大寫
eg.setStudentName
用於IOS/Android系統
2.返回值:將函式的執行結果返回給呼叫它的函式
(1)return語句表示函式的返回結果,該語句只會執行一次
(2)函式返回值型別需要與return語句返回的資料型別匹配,否則編譯錯誤
(3)如果函式不需要返回值,則可以將返回值型別設定void,並且可以省略return語句
3.引數列表:函式執行期間需要哪些資料參與運算
(1)引數列表內所有引數的資料型別都要給出來,不得省略
(2)如果函式不需要引數,引數列表的括號也不可以省略
4.函式體:函式執行的功能程式碼
也可以不定義,中進行宣告,在主函式之後再進行定義:返回值型別 函式名(引數型別)
PS:功能和四大要素的關係
1.函式名是給功能程式碼命名
2.返回值是功能程式碼的結果
3.引數列表是 為了完成功能需要的起始資料
4.函式體是實現該功能的程式碼步驟
2、函式的使用
呼叫函式是函式使用的最終目的
函式呼叫的方式:
接受返回值的變數 = 函式名(引數列表);
注意:即使函式引數列表為空,在函式呼叫時引數列表的括號也可以省略。
四、概念理解:
1.主調函式 和 被調函式
主動發起函式呼叫的函式-->主調函式;主調函式尋找的那個函式-->被調函式
2.形式引數 和 實際引數
形參:被調函式在定義階段,被調函式的引數列表
實參:主調函式發起呼叫時,主調函式傳遞給被調函式的值
※形參和實參需要在數量、型別、順序上匹配
為什麼形參叫形參??
形婚:只有夫妻之名,沒有夫妻之實-->形參:只有引數之名,沒有引數之實;如果不呼叫這個函式,這個函式一輩子都沒有記憶體空間;
主調函式需要負責給被調函式分配記憶體空間,用完之後記憶體就被回收了
PS:函式呼叫的實質:資料的流動
3.區域性變數 和 全域性變數
區域性變數的作用範圍:僅限於當前函式的內部(形參也視為區域性變數)
全域性變數的作用範圍:定義位置開始,直至檔案的結尾-->作用:提供了另一種函式之間資料傳遞的方法
??區域性變數與全域性變數重名??(允許重名)當出現重名時,區域性變數的作用範圍會覆蓋全域性變數的作用範圍
4.值傳遞 和 地址傳遞 (C++ 引用傳遞)
(1)值傳遞:
(2)地址傳遞
& 取地址符,給定一個變數,計算該白能量的記憶體地址
* 指標運算子,給定一個地址,取出該地址記憶體的資料
※地址傳遞的特點:
①主調函式傳參給被調函式是地址而非變數的數值
②在被調函式內,指標的*參與運算
值傳遞的特點
1.傳參為數值
2.除了return語句,無法將計算結果發揮主調函式
3.如果主調函式不希望被調函式修改變數的值,則應該採用值傳遞
地址傳遞的特點
1.傳參為地址
2.可以將計算結果返回主調函式
3.如果主調函式希望被調函式修改變數的值,則應該採用地址傳遞
地址傳遞是除了return之外另一種被調函式將計算結果返回給主調函式的途徑
五、陣列傳參
被調函式裡的sizeof(a)/sizeof(a[0])=1
被調函式無法計算陣列長度,因此主調函式需要將陣列長度作為引數一併傳參
PS:當指標和陣列處理的是同一塊記憶體的時候:[]<==>*
陣列<==>基準點+偏移量
這就是為什麼編譯器不會檢查陣列越界的問題,只有執行起來之後你才能看!看!看!出來
語法糖:兩種語法,A和B在編譯時完全等價,但是A寫法比B寫法更加簡便,那麼A就是B的語法糖::[] 是 * 的語法糖
for(①;②;③){④;}<==>①;while(②){③;④;}
for 也就是 while 的語法糖
語法鹽:繁雜的語法
相關文章
- 高階C語言7C語言
- 高階C語言1C語言
- 高階C語言2C語言
- Haskell學習-高階函式Haskell函式
- 物聯網嵌入式高階C語言流行框架、學習路線圖C語言框架
- Python 函數語言程式設計 – 高階函式Python函數程式設計函式
- 從高階函式--->高階元件函式元件
- 逍遙自在學C語言 | 位運算子^的高階用法C語言
- 逍遙自在學C語言 | 位運算子&的高階用法C語言
- 高階函式函式
- Python 函式進階-高階函式Python函式
- R語言學習-高階資料管理R語言
- C語言學習的幾個階段C語言
- c語言學習筆記===函式C語言筆記函式
- Kotlin——高階篇(二):高階函式詳解與標準的高階函式使用Kotlin函式
- Javascript 高階函式JavaScript函式
- 函式高階玩法函式
- Kotlin高階函式Kotlin函式
- oracle 高階函式Oracle函式
- python高階函式Python函式
- 學習C#高階程式設計之正規表示式C#程式設計
- 函數語言程式設計 - 玩轉高階回撥函式函數程式設計函式
- C++高階功能C++
- 逍遙自在學C語言 位運算子 "|" 的5種高階用法C語言
- Kotlin 函式6 - 高階函式Kotlin函式
- 《前端之路》之 JavaScript 高階技巧、高階函式(一)前端JavaScript函式
- 深圳大資料學習:高階函式--【千鋒】大資料函式
- JS學習理解之閉包和高階函式JS函式
- shell高階-----建立函式函式
- javaScript高階級函式JavaScript函式
- python- 函式高階Python函式
- 高階函式的使用函式
- Javscript 高階函式(上)函式
- Python函數語言程式設計-高階函式、匿名函式、裝飾器、偏函式Python函數程式設計函式
- python是高階語言嗎Python
- 探索MySQL高階語句(數學函式、聚合函式、字串函式、日期時間函式)MySql函式字串
- 從高階語言到機器語言
- python高階內建函式Python函式