Linux C語言高階學習第四天(C高階 函式)

2021-08-21 15:16:15 字數 3005 閱讀 8726

函式(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 就是可以輕鬆地為任意屬...