在學習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...