C C 基礎 this指標

2021-08-01 03:33:45 字數 1924 閱讀 1222

this 是 c++ 中的乙個關鍵字,也是乙個 const 指標,它指向當前物件,通過它可以訪問當前物件的所有成員。

所謂當前物件,是指正在使用的物件。例如對於stu.show();,stu 就是當前物件,this 就指向 stu。

下面是使用 this 的乙個完整示例:

#include 

using

namespace

std;

class student;

void student::setname(char *name)

void student::setage(int age)

void student::setscore(float score)

void student::show()

執行結果:

李華的年齡是16,成績是96.5

this 只能用在類的內部,通過 this 可以訪問類的所有成員,包括 private、protected、public 屬性的。

本例中成員函式的引數和成員變數重名,只能通過 this 區分。以成員函式setname(char *name)為例,它的形參是name,和成員變數name重名,如果寫作name = name;這樣的語句,就是給形參name賦值,而不是給成員變數name賦值。而寫作this -> name = name;後,=左邊的name就是成員變數,右邊的name就是形參,一目了然。

注意,this 是乙個指標,要用->來訪問成員變數或成員函式。

this 雖然用在類的內部,但是只有在物件被建立以後才會給 this 賦值,並且這個賦值的過程是編譯器自動完成的,不需要使用者干預,使用者也不能顯式地給 this 賦值。本例中,this 的值和 pstu 的值是相同的。

我們不妨來證明一下,給 student 類新增乙個成員函式printthis(),專門用來輸出 this 的值,如下所示:

void student::printthis()

{ cout

<《然後在 main() 函式中建立物件並呼叫 printthis():

student *pstu1 = new student;

pstu1-> printthis();

coutpstu2-> printthis();

cout《執行結果:

0x7b17d8

0x7b17d8

0x7b17f0

0x7b17f0

可以發現,this 確實指向了當前物件,而且對於不同的物件,this 的值也不一樣。

幾點注意:

this 是 const 指標,它的值是不能被修改的,一切企圖修改該指標的操作,如賦值、遞增、遞減等都是不允許的。

this 只能在成員函式內部使用,用在其他地方沒有意義,也是非法的。

只有當物件被建立後 this 才有意義,因此不能在 static 成員函式中使用(後續會講到 static 成員)。

this 到底是什麼?

1.this 實際上是成員函式的乙個形參,在呼叫成員函式時將物件的位址作為實參傳遞給 this。不過 this 這個形參是隱式的,它並不出現在**中,而是在編譯階段由編譯器默默地將它新增到引數列表中。

2.this 作為隱式形參,本質上是成員函式的區域性變數,所以只能用在成員函式的內部,並且只有在通過物件呼叫成員函式時才給 this 賦值。

3.this指標並不占用物件的空間

4.this在成員函式的開始執行前構造,在成員函式的執行結束後清除

5.this指標可能存放在堆,棧,也可能是結存器。

在《c++函式編譯原理和成員函式的實現》一節中講到,成員函式最終被編譯成與物件無關的普通函式,除了成員變數,會丟失所有資訊,所以編譯時要在成員函式中新增乙個額外的引數,把當前物件的首位址傳入,以此來關聯成員函式和成員變數。這個額外的引數,實際上就是 this,它是成員函式和成員變數關聯的橋梁。

C C 基礎 指標(3)

在c中使用動態記憶體,可以使用malloc來動態開闢一段空間。int p int malloc sizeof int 10 上面所示的例子就是使用malloc開闢動態記憶體的例子。使用malloc開闢動態記憶體返回的是乙個void型別的指標。可以使用型別轉換來使用乙個指標來儲存這個位址。動態開闢的記...

C C 基礎 指標(5)

二級指標的示意如上圖所示 變數int a的內容是255,其位址是0x0000ffff,int p是乙個指標,指標存的是a的位址,指標的位址是0xfbc00000 int pp是乙個二級指標,指標存的是乙個位址,該位址是一級指標p所在的位址。include include 為指標變數分配記憶體 voi...

C C 中的指標(筆記) 指標基礎知識總結

記憶體區的每乙個位元組都有乙個編號,就是 位址 如果在程式中定義了乙個變數,在對程式進行編譯或者執行時,系統會給這個變數分配記憶體單元,並確定他的記憶體位址 編號 指標的實質就是記憶體位址,指標就是位址,位址就是指標 通常我們敘述時會把指標變數簡稱為指標,實際他們的含義不一樣 1指標也是一種資料型別...