1.1 指標的概念
聲明任何一個變數,系統都會為其分配一定大小的記憶體,訪問變數實際上就是訪問其所佔據的記憶體空間。
1.2 指標變數的聲明、初始化和訪問
1.2.1 聲明: 資料類型 *變數名
1.2.2 初始化: 3種方式
(1)初始化為NULL或0:表示指標變數指向的是一片無效的不可訪問的記憶體;
如: int *p= NULL;(NULL必須大寫)
(2)初始化為已聲明變數的地址;
如: int a;
int *p=&a; (指標變數的宣告類型與其所指向的變數的類型必須一致,否則就要給出顯式的強制類型轉換)
(3)初始化為某一動態分配記憶體空間的地址。
1.2.3 指標變數的訪問
可以通過該指標變數訪問記憶體中的資料,其訪問形式為:
*指標變數名
1.3 指標和數組
1.3.1 用指標操作一維數組
要點:定義相同類型的數組和指標變數,將指標變數指向數組首地址。
如:
1 int a[]={1,2},b[]={3,4}
2 int *p=NULL;
3 p=a;
4
5 p=&b[0];
1.3.2 用指標操作二維數組
(1)使用指向行的指標變數操作二維數組
聲明形式為: 資料類型 (*指標變數名)[行長度];
如:
1 int a[][2]={1,2},b[][2]={3,4};
2 int (*p)[2]=NULL;
3
4 p=a;
5 cout<<p[0][0]<<p[0][1];
6
7 p=&b[0];
8 cout<<p[0][0]<<p[0][1];
(2)使用指標變數操作二維數組
如:
1 int a[][2]={1,2,3,4},b[][2]={4,3,2,1};
2 int *p=NULL;
3
4 p=a[0];
5 cout<<p[0]<<p[1];
6
7 p=&b[0][0];
8 cout<<p[0]<<p[1];
註:第四行和第七行等價,都表示二維數組第一個元素的首地址。
1.4 指向指標的指標
二級指標變數的聲明方式為: 資料類型 **變數名;
。。。
1.5 const指標
const指標分為常量指標和指標常量。
1.5.1 常量指標
聲明形式: const 資料類型 *變數名;
常量指標所指向的記憶體位址可以改變,但通過常量指標只能從記憶體讀取資料,但不能修改記憶體中的資料。
1.5.2 指標常量
聲明形式: 資料類型 *const 變數名;
指標常量是一個常量而不是變數,因此指標常量所指向的記憶體是固定的,不能改變的,但可以修改記憶體中的資料。
1.6 堆記憶體配置
堆記憶體配置就是動態記憶體分配,指在程式運行時從堆中為指標變數申請實際需要的記憶體空間,當其不再使用時,要及時釋放。
C++中,使用new和delete這兩個關鍵字完成堆記憶體配置和釋放的操作。
說明:
(1)使用new分配的記憶體必須使用delete釋放,否則會造成記憶體泄露,導致電腦處理速度變慢。
(2)在使用new分配堆記憶體時要區分[ ]和()。[ ]指定元素數目,()指定記憶體初值。如:
1 int a=3;
2 int *p1 = new int[a]; //分配了3個int型大小的記憶體
3 int *p2 = new int(a); //分配了1個int型大小的記憶體,且初值為3.
(3)在分配記憶體時為多個元素分配了記憶體,那麼在使用delete釋放記憶體時必須加[ ].
(4)必須使用指標儲存分配的記憶體首地址,這是由於delete鬚根據首地址進行記憶體釋放。
(5)如果分配是一個記憶體,釋放時可以將[ ]去掉。
1.7 引用
1.7.1 引用的概念
引用就是別名。
1.7.2 引用的聲明
聲明形式: 資料類型 &引用名 = 變數名 其中,“&”是引用運算子。 其他用途:位與運算子、取地址運算子。
1.73 const引用
cosnt引用沒有常量引用和引用常量之分,兩種聲明形式:
const 資料類型 &引用名 = 變數名或常量 或者 資料類型 const &引用名 = 變數名或常量
const引用只能訪問所引用對象的值,而不能修改所引用對象的值。
好了,今天的學習就到這裡了。
參考:
物件導向程式設計----C++進階語言 主編:趙宏