[C++]指標和引用(一)
指標和引用
指標的概念
資料在記憶體中是如何存取的?
系統根據程式中定義變數的型別,給變數分配一定的長度空間。字元型佔1個位元組,整型數佔4個位元組.....。記憶體區的每個位元組都有編號,稱之為地址。
1、直接訪問
按變數地址存取變數的值。cin>>i; 實際上放到定義 i 單元的地址中。
2、間接訪問
將變數的地址存放在另一個單元p中,通過 p 取出變數的地址,再針對變數操作。
一個變數的地址稱為該變數的指標。
如果在程式中定義了一個變數或陣列,那麼,這個變數或陣列的地址(指標)也就確定為一個常量。
變數的指標和指向變數的指標變數
變數的指標就是變數的地址,當變數定義後,其指標(地址)是一常量。
可以定義一個變數專門用來存放另一變數的地址,這種變數我們稱之為指標變數。在編譯時同樣分配一定位元組的儲存單元,未賦初值時,該儲存單元內的值是隨機的。
指標變數定義的一般形式為:
指標變數同樣也可以賦值:
也可以在定義指標變數時賦初值:
一個指標變數只能指向同一型別的變數。即整型指標變數只能放整型資料的地址,而不能放其它型別資料的地址。
*在定義語句中只表示變數的型別是指標,沒有任何計算意義。
* 在語句中表示“指向”。&表示“地址”。
指標變數的引用
指標變數只能存放地址,不要將非地址資料賦給指標變數。
++, - -, * 優先順序相同,都是右結合性。
指標變數作為函式引數:
函式的引數可以是指標型別,它的作用是將一個變數的地址傳送到另一個函式中。
指標變數作為函式引數與變數本身作函式引數不同,變數作函式引數傳遞的是具體值,而指標作函式引數傳遞的是記憶體的地址。
輸入a, b兩個整數,按大小輸出這兩個數。
swap(int *p1, int *p2)
{ int t;
t=*p1; *p1=*p2; *p2=t;
}
void main(void)
{ int *point1, *point2, a,b;
cin>>a>>b;
point1=&a; point2=&b;
if (a<b)
swap (point1, point2);
cout<<“a=“<<a<<“,b=”<<b<<endl;
cout<<*point1<<“,”<<*point2<<endl;
}
用指標變數作函式引數,在被調函式的執行過程中,應使指標變數所指向的引數值發生變化,這樣,函式在呼叫結束後,其變化值才能保留回主調函式。
函式呼叫不能改變實參指標變數的值,但可以改變實參指標變數所指向變數的值。
用指標變數作函式引數,可以得到多個變化了的值。
陣列的指標和指向陣列的指標變數
陣列與變數一樣,在記憶體中佔據單元,有地址,一樣可以用指標來表示。C++規定:陣列名就是陣列的起始地址;又規定:陣列的指標就是陣列的起始地址。陣列元素的指標就是陣列元素的地址。
一、指向陣列元素的指標變數的定義與賦值
二、通過指標引用陣列元素
用指向陣列的指標變數輸出陣列的全部元素
三、陣列名作函式引數
陣列名可以作函式的實參和形參,傳遞的是陣列的地址。這樣,實參、形參共同指向同一段記憶體單元,記憶體單元中的資料發生變化,這種變化會反應到主調函式內。
在函式呼叫時,形引數組並沒有另外開闢新的儲存單元,而是以實引數組的首地址作為形引數組的首地址。這樣形引數組的元素值發生了變化也就使實引數組的元素值發生了變化。
1、形參實參都用陣列名
2、實參用陣列名,形參用指標變數
3、形參實參都用指標變數
4、實參為指標變數,形參為陣列名
相關文章
- C++引用和指標C++指標
- [C++]指標和引用(二)C++指標
- [C++]指標和引用(三)C++指標
- [C++]指標和引用(四)C++指標
- 詳解c++指標的指標和指標的引用C++指標
- java的引用:用C++/C的引用和指標去理解JavaC++指標
- 1.0 - 指標和引用指標
- C++中的指標與引用C++指標
- nim的引用和指標指標
- 《指標和引用小結》指標
- 細說引用和指標指標
- C++指標與引用的區別C++指標
- c++ 類的函式引用 指標C++函式指標
- 07 引用 指標 和傳遞指標
- 指標和引用的區別指標
- C、C++用指標引用的差異C++指標
- c++指標傳遞與引用傳遞C++指標
- 指標與引用指標
- C++中const與指標、引用的總結C++指標
- C++中的指標與引用詳細解讀C++指標
- C++智慧指標學習——小談引用計數C++指標
- C++ 引用和指標:記憶體地址、建立方法及應用解析C++指標記憶體
- C++弱引用智慧指標weak_ptr的用處C++指標
- C/C++引用和指標的聯絡和區別C++指標
- 再學C/C++ 之 指標常量 和 常量指標C++指標
- [C++] 成員函式指標和函式指標C++函式指標
- c++中指標和引用的區別?C++指標
- C++中指標和引用的區別C++指標
- C++的未來和指標C++指標
- C++語言中陣列指標和指標陣列徹底分析(系列一) (轉)C++陣列指標
- C++ this 指標C++指標
- C++ 指標C++指標
- C++中引用傳遞與指標傳遞區別(進一步整理)C++指標
- 這裡是值引用還是指標引用?指標
- 【C++系列】指標物件和物件指標的區別C++指標物件
- GO切片傳值/引用/指標Go指標
- 引用的底層為指標指標
- C++引用比指標的好處C++指標