在每個成員函式中都包含乙個特殊的指標,即this指標,它的名字是固定的。
this指標是指向當前物件的指標,它的值是當前被呼叫的成員函式所在物件的起始位址。
例1、
class student
private:
int age;
int tel;
};int main()
此時在主函式定義了乙個student的類物件a,那麼此時this指標的值就是該物件a的起始位址。
this 指標是隱式使用的,它是作為引數傳遞給成員函式的。如果成員函式從表面上看沒有引數那麼實際上他有乙個引數,就是this指標,如果成員函式從表面上看有乙個引數那麼實際上他有兩個引數,就是this指標。
this指標最大作用是指向當前物件然後通過this指標去引用各成員。
這些都是編譯器自動實現的,程式設計師不需要人為的在成員函式的引數中新增this指標
關於this 指標的型別:類型別 * const
this 指標並不是物件的一部分,因此不影響sizeof的結果。
this 指標的作用域是在非靜態成員函式的內部
this 指標是類成員函式的第乙個預設引數,編譯器會自動傳參
只有在類的非靜態成員函式中才可以使用this指標,因為我們知道靜態成員函式是沒有this指標的
有關_thiscall的呼叫約定
thiscall是唯一乙個不能明確指明的函式修飾,因為thiscall不是關鍵字。它是c++類成員函式預設的呼叫約定。由於成員函式呼叫還有乙個this指標,因此必須特殊處理,thiscall意味著:
thiscall只能用在類成員函式上
引數從右往左壓棧
如果引數個數確定,this指標通過ecx暫存器傳給被呼叫者,如果引數不確定this指標在所有引數被壓棧完成之後壓棧
對於引數個數不定的呼叫者自己清理堆疊否則函式自己清理
為什麼叫做this指標而不叫引用呢
其實引用傳參不用建立臨時變數效率高,而用指標傳參同樣會建立臨時變數,但是由於c++就是這麼建立的先有的this之後發現用引用可以也來不及改了。
在靜態成員函式中是沒有this指標的。
關於指標傳遞和指標的指標
一開始沒有理解,導致對這個概念非常的模糊和不解。最近看完 徹底搞定c語言指標詳解 裡面關於指標的指標的解釋有了頓悟感。其實,很好理解,是我把它想複雜了。我們都知道,實參和形參的區別。形參並無法改變實參,這就是值傳遞。還有一種叫指標傳遞,實質就是去操作指標的指向物件。例子如下 exchg2 int p...
關於指標和指向指標的指標
如果在乙個函式內部你需要修改指標所指向的資料內容,那就使用指標,如果你要修改指標的指向,那就使用指向指標的指標。如果函式的引數是乙個指標,不要指望用該指標去申請動態記憶體。test函式的語句getmemory str,200 並沒有使str獲得期望的記憶體,str依舊是null。void getme...
關於空指標
臭名昭著的空指標到底是什麼?語言定義中說明,每一種指標型別都有乙個特殊值 空指標 它與同型別的其它所有指標值都不相同,它 與任何物件或函式的指標值都不相等 也就是說,取位址操作符 永遠也不能得到空指標,同樣對 malloc 的成功呼叫也不會返回空指標,如果失敗,malloc 的確返回空指標,這是空指...