對函式傳入,是指用實參將外部資料傳給函式,以便於在函式體內對其處理。
對函式傳出,是指用返回值將函式處理的結果交給主調函式。
設計函式時要考慮到:
1、函式是否擔負修改實參的任務?
2、傳入實參是否會影響效率?
3、形參是否還要承擔向呼叫者傳遞部分結果的任務?
關注函式的返回值:
1、這個位址是區域性變數的嗎?
2、這個位址是由函式malloc()或new產生的?
3、這個位址是形參傳進來的嗎?
4、是全域性變數的位址嗎?
5、是靜態變數的位址嗎?
若是4或5,則無事;若是1,則錯了!若是2,則要追蹤其何時釋放;若是3,則要看形參自身是指標,則可以,若形參不是指標,則錯。
函式返回的可以是:
1、變數的值(無論區域性還是全域性);
2、靜態區域性變數的值或址;
3、靜態區域性陣列的址;
4、全域性變數的值或址;
5、全域性陣列的址;
6、堆空間的位址;
注意:函式返回型別是指標時的模糊性
函式的返回型別可以是指標。比如,用於在陣列中查詢某值的函式,通常做成「當查到時,返回指向該元素的指標;查不到時,返回null指標。」
這種「用乙個值表示兩種不同含義」的做法很危險。因為它加重了使用函式者的負擔。若查詢的元素的值就是null怎麼辦?
一些結論:
1、函式呼叫只能用於非靜態區域性變數的初始化。
2、靜態變數作形參,失去了靜態性
子函式的構造原則:
乙個函式應具有的強壯性體現在兩個方面:
1、對傳來的實參不能無條件地接受,要進行合法性驗證,不要基於「實參都是對的」的懶惰慣性思維,要學會拒絕;
2、函式體內的處理過程也要時時進行合理性檢查,要由容錯處理(異常處理)機制,一旦有錯不但會報警,還要有全身而退的對策。因為程式是在有限資源的空間上執行的。
通常由三種處理方法:
1)最極端的做法就是用exit(-1)函式,粗暴的終止程式,這無異於**;
2)用拋擲異常的現代手段;
3)讓子函式溫和地停止,並返回乙個真假值,此法能使程式不致夭折,將決定權交由呼叫者酌情處理。此謂全身而退策略。
函式指標的意義:
1、歷史的原因,函式型別不能做引數,語言將自動將轉換為函式指標。
2、通過函式指標可以使c++語言使用其他語言寫就的函式。
3、通過函式指標引數尅使主調函式得到不同的被傳入的函式,於是可以表現出多種行為。
4、函式指標使虛函式得以實現。
5、通過函式指標可以括約本地程序,訪問其他程序。
6、函式指標使函式設計更加變幻莫測,會偏離函式的黑盒性。
7、函式可以定義引用。
函式指標有它的乙個致命的缺點:
無法對引數和返回值的型別進行檢查,因為函式已經退化成指標,指標是不帶有這些型別資訊的。少了型別檢查,當引數或者返回值不一致時,會造成嚴重的錯誤。
window存在的一些問題!
1 some tips for table service.1.1 修改最大連線數,如果需要。config file servicepointmanager.defaultconnectionlimit 24 1.2 turn off 100 continue config file service...
DCS系統存在的一些問題
dcs系統是繼plc之外的一大自動化控制系統,它在化工 火電等領域的應用極為廣泛,但是生產方面的自動化技術需求進一步提高,傳統的dcs系統已不能滿足需要,需要進行技術公升級。dcs系統由多台計算機分別控制生產過程中多個控制迴路,同時又可集中獲取資料 集中管理和集中控制的自動控制系統。分布式控制系統採...
Rust中的可變引用(存在一些問題)
示例程式 fn main s 輸出 yuyoubei fn make yuyoubei s mut string 使用使用 mut來修飾函式呼叫時的可變引用 函式宣告時也需要 mut來修飾函式型別。例如下面的程式是錯誤的 fn main r2 r1,r2 會提示出錯 error e0499 cann...