常量指標
const int *p / int const *p
指標常量
int * const p
常引用
const int &p = a;
數組
1. 定義時初使化,花括弧內給出常量表;
2. 如果給定的個數不足,則對其餘元素初使化為0;
3. 靜態數組,C++自動初使化為0;
指標數組 int *pArray[2] = {NULL};
數組指標
int nArray[5] = {0};
int (*pArray)[5] = nArray;
(int (*pArray)[5])[2] = {nArray, nArray};
函數表 : 傳回值、函數名、參數表(類型、個數)
函數的調用機制:
1. 壓入調用現場;
2. 產生傳回值對象,壓入其地址;
3. 壓入入參/出參
4. 調用指定函數
5. 向出參填值,並向eax儲存傳回值
6. 各參數出棧,並將eax所指向的局部對象傳回值賦給傳回值對象;
編譯器會根據不同的函數重稱和參數表來選擇重載函數,具體調用過程為:
1. 尋找最符合函數名和參數表類型的函數;
2. 否則,尋找一個模板函數,執行個體化後進行調用;
3. 否則,尋找一個可通過參數類型轉換後,能夠匹配的函數;
若以上過程失敗,則函數調用失敗,若某個過程出現二義性,也調用失敗;
函數的入口地址:函數名/函數地址
編譯器調用函數時不區分函數名和函數地址,我認為函數名最終都會映射為函數地址;
函數調用的目標,就是找到入口地址,傳遞參數;
int simple();
函數名: simple
函數地址:&simple
函數間址:*&simple
函數指標:( (int (*)()) &simple )()
函數原型 int simple();
函數原型類型:typedef int simple() SIMPLE_FUNC;
函數指標類型:typedef int (*SIMPLE_PFUN)();
函數指標變數的一些定義方法:
int (*pfun)() = &simple;
SIMPLE_FUNC *pfun = &simple;
SIMPLE_PFUN pfun = &simple;
函數指標數組:
int (*pFunArray[2])() = {&simple, &simple};
SIMPLE_PFUN pFuncArray[2] = {&simple, &simple};
==========================================================================================
建構函式及類型轉換
1. 進行對象初使化賦值操作時,C++為對象定義了一個預設的複製建構函式;
當然,使用者可以定義更多的建構函式,以提供初使化時可進行從多種類型的賦值初使化;
2. 當進行對象的賦值操作時,C++為對象定義了預設的賦值函數;
當然,使用者可以定義更多的operate =運算子多載版本;
3. 編譯器在進行對象演算法運算、賦值運算、函數調用時,都會進行隱式的類型轉換:
包括 基本類型/類 -> 類的轉換,通過建構函式版本實現;
類 -> 基本類型 的轉換,通過類型轉換函式實現;