1.實參的資料型別必須與
形參的相同
形參和實參的區別
形參出現在函式定義中,在整個函式體內都可以使用, 離開該函式則不能使用。
實參出現在主調函式中,進入被調函式後,實參變數也不能使用。
形參和實參的功能是作資料傳送。發生函式呼叫時, 主調函式把實參的值傳送給被調函式的形參從而實現主調函式向被調函式的資料傳送。
1.形參變數只有在被呼叫時才分配記憶體單元,在呼叫結束時, 即刻釋放所分配的記憶體單元。因此,形參只有在函式內部有效。 函式呼叫結束返回主調函式後則不能再使用該形參變數。
2.實參可以是常量、變數、表示式、函式等, 無論實參是何種型別的量,在進行函式呼叫時,它們都必須具有確定的值, 以便把這些值傳送給形參。 因此應預先用賦值,輸入等辦法使實參獲得確定值。
3.實參和形參在數量上,型別上,順序上應嚴格一致, 否則會發生「型別不匹配」的錯誤。
4.函式呼叫中發生的資料傳送是單向的。 即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。 因此在函式呼叫過程中,形參的值發生改變,而實參中的值不會變化。
5.當形參和實參不是指標型別時,在該函式執行時,形參和實參是不同的變數,他們在記憶體中位於不同的位置,形參將實參的內容複製乙份,在該函式執行結束的時候形參被釋放,而實參內容不會改變。
而如果函式的引數是指標型別變數,在呼叫該函式的過程中,傳給函式的是實參的位址,在函式體內部使用的也是實參的位址,即使用的就是實參本身。所以在函式體內部可以改變實參的值。
如果實參與形參不一致,以形參型別為準那這句話怎麼解釋
比如下面的** 123
4567
89
1011
void
test(
int
a);
其中a就是形參,並且是
int
型。
你呼叫的時候
char
b = 30;
test(b);
這樣也是可以的,b是實參,並不是
int
型,和形參的型別是不一樣的。
不過編譯器會自動把
char
轉成
int
的,所以是可以編譯通過的。
也就是你問的如果實參與形參不一致,以形參型別為準的解釋
函式過載是是根據函式的引數列表區分函式的版本,返回值不同是不能區分的。比如 int fun( int a,int b);
在編譯的時候,編譯器編譯函式,生成乙個類似"_fun_int_int"的名稱放在庫中,以便程式呼叫的時候使用。
如果你想過載void fun( int a,int b);生成的函式名稱也是"_fun_int_int",函式在庫中的名稱是唯一的,就像你在程式中定義變數一樣。這就算是重定義吧(姑且這麼說),這時編譯器該呼叫哪個函式?
那同名函式又是怎麼要求的呢
函式的引數列表是過載的識別符號。int fun(int a, dobule b); //編譯後生成 : _fun_int_double
int fun(int a, int b); // 編譯後生成 : _fun_int_int
根據生成的名稱來指定呼叫哪個版本的函式;
fun(1,1.2); // 進行匹配,第乙個函式為最佳匹配,然後根據 _fun_int_double 找到函式
第六周學習筆記
課程位址 第十七講,離散與維數災難 主要內容 值得注意的地方 1.未知的psa p ps a 和r rr 即便我們能夠通過值迭代或策略迭代來解決mdp問題,但對於一些實際問題,我們不知道p pp和r rr的具體值,這時我們可以通過取樣,在尋找策略的過程中同時模擬出真實的模型 第十八講,線性二次型調節...
第六周 學習筆記
一 位運算 位運算子 1 位邏輯符 2 移位運算子 2.位邏輯運算 二進位制位的運算,按位運算 位與運算 全1為 1位異或運算 不相等為 1,相等為 0位或運算 有1為 1位取反運算 位邏輯運算與邏輯運算的區別 邏輯運算的結果只有0和 13.移位運算 1 2 左移兩位 1 2 右移兩位 考慮正負號 ...
Boolan C 第六周學習筆記
談談stl容器vector vector作為一種連續性容器,是指它在記憶體的表現上,邏輯上相鄰的資料,在記憶體中也是連續的。這就保證它在訪問每個元素的操作時可以在固定的指令上通過偏移的方式去訪問,相比一般的陣列,它還有乙個明顯的特點就是大小可變。vector的空間是動態分配的,由於大小可變,一旦遇到...