1. 程式人生 > >C/C++ 指標小結——指標的概念和如何使用指標

C/C++ 指標小結——指標的概念和如何使用指標

一、理解指標

當我們宣告一個變數時,系統會在記憶體中分配適當的儲存空間,以儲存該變數的值,由於每一個位元組都有唯一的地址編號,因而記憶體儲存空間都有自己的地址編號。又由於記憶體地址只是編號,因而又可以把它複製給變數,這種儲存地址的變數就稱為指標變數

我們並不關心指標的實際值,因為每次執行時,指標的值都會發生變化的(每次執行意味著變數重新分配地址)。

我們不能直接儲存地址的值,只能利用地址運算子(&),通過儲存在地址中的變數來獲得地址的值。位於變數之前的地址運算子(&)將可返回該變數的地址。運算子&只能用於單個變數或陣列元素。

二、指標變數的宣告及初始化

由於指標變數包含的是儲存某種資料型別的地址,因此在使用前必須把它們宣告為指標。 例如:

int *p; //integer pointer  把變數p宣告為指標變數,指向整型資料

把變數的地址賦值給指標變數的過程稱為指標變數的初始化。

必須確保指標總是指向相應的資料型別。

指標可以初始化給變數,NULL,零。

指標很靈活,我們可以在不同的語句中使用同一指標指向不同的資料型別,也可以使用不同的指標指向同一資料變數。

三、通過指標訪問變數

我們可以用間接運算子‘*’ (反引用運算子) 來實現對指標變數的值的訪問。 例如:

int quantity, *p, n;
quantity = 179;
p = &quantity;
n = *p;

故n==179。 特別注意:

*ptr = 25;

該語句把值25存放在地址等於ptr的值的記憶體中。

四、指標鏈(指向指標的指標)

指向指標的指標變數必須在名稱的前面新增額外的間接運算子。例如:

int **p2;

該宣告語句告訴編譯器 p2 是指向int型別的指標的指標。

五、指標表示式

關於指標所指變數的值的表示式;例如:如果p1和p2都是宣告並初始化了得指標,那麼下面的語句是合法的:

y = *p1 * *p2; //第二個 * 是運算子號
sum = sum + *p1;
z = 5* - *p2/*p1;
*p2 = *p2 + 10;

關於關於指標的表示式 C語言允許對指標與整數進行運算;也可以在兩個指標之間進行減法運算。例如:

p1 - 2;
p1 - p2;

如果 p1 和 p2 指向相同的陣列,那麼p2-p1將給出p1與p2之間的元素數目(p1/p2、p1*p2、p1/3)。指標不能用於除法或乘法運算(p1+p2);類似地,不能對兩個指標進行加法操作。

還可以使用關係運算符進行指標的的比較。諸如p1 > p2、 p1 == p2和p1 != p2都是允許的。但是,指向不同或無關聯變數的指標間的比較沒有意義。比較可以用於處理陣列和字串。

六、指標的遞增與比例因

在指標進行遞增時,所增加的值為該指標指向資料型別的“長度”。這種長度就稱為比例因子(scale factor)。例如:如果p1為整形指標,初始值為2800,那麼經過p1 = p1 + 1運算後p1的值為2802,而不是2801。