如何理解C 中的指標

2021-10-23 11:17:00 字數 2468 閱讀 7972

在學習c++指標的過程中 要學習到兩個新的運算子

取位址運算子(&):得到變數的位址

提領運算子()***:取得「位於該指標所指記憶體位址上」的物件,即指標所指變數的值。

先了解乙個變數的定義儲存過程和原理:

例如: int a=5;

首先定義了乙個int 型別的變數a。需要開闢乙個int 型別大小的空間。然後執行a=5,把5轉化成二進位制後寫入剛剛開闢的記憶體中。

這是乙個最簡單的定義過程。

對於程式設計師來說,記憶體可以簡化成乙個很長很長的紙帶:

每一格都是乙個位元組,所有的資料儲存在這些格仔裡,所有的操作就是對格仔進行寫入和讀取的操作。

分析一段**:

int a =1;

//定義a=1

int* p =

&a;//定義指標p,指向a

int*

* q =

&p;//定義指標q,指向p

cout <<

"**q is\t"

<<

**q << endl;

cout <<

"*q is\t"

<<

*q << endl;

cout <<

"q is \t"

<< q << endl;

cout <<

"*p is\t"

<<

*p << endl;

cout <<

"p is\t"

<< p << endl;

cout <<

"a is\t"

<< a << endl;

cout <<

"&q is\t"

<<

&q << endl;

cout <<

"&p is\t"

<<

&p << endl;

cout <<

"&a is\t"

<<

&a << endl;

return

0;

根據初始化過程試著用「紙條」(記憶體)來分析

其中:0xa1、0xa2等等假設為記憶體位址

int a=1;

開闢出 0xa1儲存變數a的值1

int * p=&a;

開闢出 0xa2儲存指標p的值&a,即變數a的位址

int**q=p;

開闢出0xa3儲存指標q的值&p,即指標p的位址

全部分析完:

*

*從下往上看!*

*cout <<

"**q is\t"

<<

**q << endl;

/兩個提領操作符,從右邊往左計算。

/第一次提領運算:*q 得到指標q所指向的位址0xa2中的內容,即0xa1。

/第二次提領運算:*(*q) 得到變數(*q)所指向的位址0xa1中的內容,即變數a的值:1

cout <<

"*q is\t"

<<

*q << endl;

/有提領操作「*」,輸出指標q所指向的0xa2的值,即指標q所指向的指標p的值:0xa1,即變數a的位址0xa1。

/注意,這裡沒有取出具體的數字,取出的是乙個位址,而指標q屬於「指向指標的指標」

cout <<

"q is \t"

<< q << endl;

/輸出q的內容,即指標p的位址,假設為0xa2

cout <<

"*p is\t"

<<

*p << endl;

/有提領操作「*」,輸出指標p所指向的0xa1的值,即指標p所指向的變數a的值:1

cout <<

"p is\t"

<< p << endl;

/輸出p的內容,即變數a的位址,假設為0xa1

cout <<

"a is\t"

<< a << endl;

/輸出a的值:1

cout <<

"&q is\t"

<<

&q << endl;

/輸出指標q的位址0xa3

cout <<

"&p is\t"

<<

&p << endl;

/輸出指標p的位址0xa2

cout <<

"&a is\t"

<<

&a << endl;

/輸出變數a的位址0xa1

執行結果:

C 中this指標的理解

先要理解class的意思。class應該理解為一種型別,象int,char一樣,是使用者自定義的型別。用這個型別可以來宣告乙個變數,比如int x,myclass my等等。這樣就像變數x具有int型別一樣,變數my具有myclass型別。理解了這個,就好解釋this了,my裡的this 就是指向m...

C語言指標專題 如何理解指標

小魚的技術部落格,主談c語言程式設計,順便談談人生,談談理想,關注熱鏈 我的csdn技術部落格 最近在研讀c primer plus 5版中文版,老外寫的,還是很經典的,推薦給讀者們,有需要的朋友可以在這裡購買 c primer plus 5版中文版 指標,傳說中是c語言中的乙個難點,且是難點中的難...

對於C 中 this指標的理解

先要理解class的意思。class應該理解為一種型別,象int,char一樣,是使用者自定義的型別。雖然比int char這樣build in型別複雜的多,但首先要理解它們一樣是型別 用這個型別可以來宣告乙個變數,比如int x,myclass my等等。這樣就像變數x具有int型別一樣,變數my...