函式(very重點)
一、概念
一段用來執行某個功能的**-->給你乙個值,你處理完之後,再給我乙個值。
※編寫**時,一定要清楚你需要實現的功能是什麼?針對於功能設計出函式。
二、為什麼要使用函式
1)避免使主函式main()變得複雜,邏輯混亂
2)避免程式冗長、不精煉;
3)如果需要多次實現某些功能,不使用函式的話則需要重複的話工作量大
--->模組化程式設計
模組化程式設計的特點:高聚合、低耦合-->給一段功能**解耦能體現出你的能力
功能模組:乙個或幾個具有特定功能函式構成的**
三、函式定義與使用
函式需要先定義再使用
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 的語法糖
語法鹽:繁雜的語法
LinuxC學習第四天
1 c語言程式編譯步驟 重要 預處理 預編譯 處理 開頭的內容,進行替換 去掉注釋。s生成預處理檔案,字尾名是 i編譯編譯器對 進行編譯 最複雜 耗時最長的過程生成彙編檔案,字尾名.s彙編把彙編檔案編譯二進位制目標檔案生成目標檔案,字尾名是.o鏈結把多個目標檔案按照一定規則整合成乙個可以執行的程式生...
Linux C學習第四天
1 什麼是變數?其值在其作用域內可以改變的量稱為變數。乙個變數應該有乙個名字,在記憶體中佔據一定的儲存空間。變數在使用前必須要定義,每個變數都有自己的位址。變數依據其定義的型別,分為不同型別,如整型變數 字元型變數 浮點型變數 指標變數等。變數的值可以發生改變,意味著它可以被覆蓋 被寫入 被賦值。每...
python高階第四天
屬性描述符是實現了特定協議的類,只要實現了 get set 和 delete 三個方法中的任意乙個,這個類就是描述符,它能實現對多個屬性運用相同訪問邏輯的一種方式,通俗來說就是 建立乙個例項,作為另乙個類的類屬性。除了使用類當作乙個屬性描述符,我們之前學習的 property 就是可以輕鬆地為任意屬...