1. 函數在沒有被調用時是靜止的,此時的形參只是一個符號。 函數在被調用時才執行,也是在被調用時,才由主調函數將實參賦給形參。
2. 函數調用執行過程: 當程序被啟動時,首先從外部存儲器將代碼加載到內存的代碼區, 然後從入口地址(main函數的起始地址)開始執行。 程序在執行過程中,如果遇到調用其他函數,則先暫停當前函數的執行,保存下一條指令的地址作為返回地址,並保存現場, 然後轉到子函數的入口地址,執行子函數。 當子函數執行完成後, 返回到主函數,恢復現場,從先前保存的指令地址開始繼續執行。
3. 函數的參數傳遞: 指的就是形參和實參結合的過程, 有值調用和引用調用兩種方式。
4. 值調用: 當發生函數調用時,給形參分配內存空間,並用實參來初始化形參,直接將實參的值傳遞給形參。 這個過程是參數值的單向傳遞過程, 此後形參的變化,不會影響到實參。
5. 引用調用: 引用是一種特殊類型的變量,可以被認為是另外一個變量的別名。 通過引用名與通過被引用的變量名訪問變量的效果是一樣的。
示例:
int i,j:
int &ri = i; //建立一個int 類型的引用,並將其初始化為變量i的一個別名
j = 10;
ri = j; //相當於i = j;
使用引用必須注意: a. 聲明一個引用時,必須同時對它進行初始化,使它指向一個已經存在的對象。
b. 一旦一個引用被初始化後,就不能指向其他對象
使用引用作為形參, 在函數被調用時,形參會成為實參的一個別名,對形參的任何操作就是對實參的操作。
6. 內聯函數: 不是在調用時發生控制轉移, 而是在編譯時,就將函數體嵌入到了每一個調用的地方。
inline void Func();
內聯函數注意點: 內聯函數必須是功能簡單,規模較小而使用頻繁的函數,不能出現循環和switch等語句
內聯函數的定義必須在第一次使用之前
對內聯函數不能使用異常接口聲明
編譯器並不保證一定將inline的標識函數作為內聯函數, 還是要根據代碼而定
7. 默認形參函數: 必須要保證默認的形參後面不能有非默認的形參。 函數調用時,實參初始化形參的順序是從左到右。
8. 函數重載: 兩個以上的函數,具有相同的函數名,但是形參的個數或者類型不一樣,編譯器會根據實參和形參的類型以及個數的最佳匹配,自動確定調用哪一個函數,這就是函數重載。