2023年2月3日訓練日記(函式學習小結)

2022-06-06 04:09:11 字數 1895 閱讀 7307

今天寫一下函式部分的知識點(函式學習小結)

簡單介紹一下函式的基礎知識:

引入函式之前先介紹一下子程式

子程式本質是乙個相對獨立的程式段,用乙個識別符號代替。子程式的使用不僅縮短了程式,節省了記憶體空間及減少了程式的編譯時間,而且有利於結構化程式設計。

接下來我來介紹函式:

函式定義的語法形式:

資料型別 函式名(形式參數列)

函式的資料型別是函式的返回值型別,函式名是識別符號,形式引數可以是空的(即無參函式),也可以有多個形參,用逗號隔開即可。但是無論有無形參,圓括號不可省略。形參必須標註型別,可以是變數名、陣列名、指標名,作用是實現主調函式與被調函式的關係。

值得注意的是函式不允許巢狀,巢狀函式視為非法。

函式的形式:

函式的形式從結構上分為三種:無參函式,有參函式,空函式。

無參函式即沒有引數傳遞的函式,一般不需要帶回函式值,此時函式型別說明為void,有參函式則一般需要帶回函式值,而空函式整體只有一對花括號,花括號內沒有任何語句的函式,例如:

函式名()

空函式不完成任何工作,只佔據乙個位置。作用是在大型程式設計中用於擴充函式功能。

函式的宣告與呼叫:

呼叫函式之前要先宣告函式原型,其格式如下:

型別說明符 被調函式名(含型別說明的形參表)

與函式定義的第一行類似,只是多了乙個分號,成為了乙個宣告語句。

函式呼叫可以作為一條語句 ,這時函式可以沒有返回值,同時函式呼叫也可以出現在表示式中,這時就必須有乙個明確的返回值。返回語句的一般表達形式為:return(表示式);當乙個函式沒有返回值時,函式中可以沒有return語句,也可以寫為return;這時函式沒有返回值,而只把流程轉向主調函式。

在呼叫函式時需要注意:

實參列表中應該給出與函式原型形參個數相同、型別相符的實參。在主調函式中的引數稱為實參,實參一般應具有確定的值。實參可以是常量、表示式,也可以是已有確定值的變數、陣列或指標名。

函式的傳值呼叫與傳址呼叫:

傳值呼叫是將實參的資料值傳遞給形參,即將實參值拷貝乙個副本存放到被呼叫函式的棧區中,但是形參值可以改變,實參並不會隨形參改變而改變,因此引數傳遞方向只是從實參傳遞到形參,簡稱為單向值傳遞。

而傳址呼叫是將是實參變數的位址值傳遞給形參,這時形參是指標,即讓形參的指標指向實參位址,這樣就可以變形參以變實參。

例如:傳值呼叫:

void swap(int a,int b)

int main()

int main()

中的i是在for迴圈中定義的,其存在時間和作用域只能被限制在該for迴圈語句中。

另外注意需要全域性變數的點:

過多的使用全域性變數,會增加除錯難度,因為多個函式都會改變全域性變數的值,不易判斷某個時刻全域性變數的值。

同時還會降低程式的通用性。如果將乙個函式移植到另乙個程式中,需要將全域性變數一起移植過去,但同時還會出現重名問題。

全域性變數在程式執行過程中一直占用記憶體單元。

全域性變數在定義時若沒有賦初值,其預設值為0。

區域性變數:

區域性變數的儲存空間是臨時分配的,當函式執行完畢,區域性變數的空間就被釋放,其中的值無法保留到下次使用。

在不同的函式中變數名可以相同,他們分別代表不同的物件,在記憶體中佔據不同的記憶體單元,互不干擾。

另外區域性變數可以遮蔽全域性變數。

區域性變數沒有賦值時,值是隨機的,記得要初始化初值。

區域性變數受棧空間大小限制,大陣列需要注意。即區域性變數的陣列不能開的很大,全域性變數隨便。

2023年3月2日訓練日記

差分約束 2 sat小結 差分約束 1 題目特徵一般比較明顯,是求解關於一組變數的特殊不等式組。2 一般分三種 最長路 求最小值 最短路 求最大值 判斷解是否存在 判負環 3 建邊的時候一定要注意隱含的不等式。根據題目所給資訊靈活加邊加超級源點,靈活應對各種不同的輸出。核心還是建邊。4 經典的應用有...

2023年2月2日訓練日記

今天是臘月28了,年味是越來越濃了,上午uc湖區買了點年貨,下午開始做題的,做了列印圖形,迴圈就可以解決。然後做了字元改變,這道題如果用字原始的查詢變換在輸出就特別麻煩了,直接在查詢中就餓輸出就比較簡單,不用改變陣列下標。然後做了顏色精簡,簡單題,按照題目中的公式去和集合中的顏色進行計算距離,取最小...

2023年3月1日訓練日記

最近就看了一下stl的內容,總結一下,stl就是乙個資料容器,所有的操作都是對容器裡的資料進行操作 1,stack棧,這是乙個先進後出的資料結構,它只有乙個出口,只能對棧頂元素進行操作,就像乙個教室只有乙個門,先進去的人只能後出。stack儲存在 定義 stackstack name 如 stack...