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

1、理解指針

當咱們聲明一個變量時,系統會在內存中分配適當的存儲空間,以保存該變量的值,因爲每個字節都有惟一的地址編號,於是內存存儲空間都有本身的地址編號。又因爲內存地址只是編號,於是又能夠把它複製給變量,這種保存地址的變量就稱爲指針變量數組

咱們並不關心指針的實際值,由於每次運行時,指針的值都會發生變化的(每次運行意味着變量從新分配地址)。指針

咱們不能直接保存地址的值,只能利用地址運算符(&),經過保存在地址中的變量來得到地址的值。位於變量以前的地址運算符(&)將可返回該變量的地址。運算符&只能用於單個變量或數組元素。code

2、指針變量的聲明及初始化

因爲指針變量包含的是儲存某種數據類型的地址,所以在使用前必須把它們聲明爲指針。 例如:內存

int *p; //integer pointer  把變量p聲明爲指針變量,指向整型數據

把變量的地址賦值給指針變量的過程稱爲指針變量的初始化。字符串

必須確保指針老是指向相應的數據類型。編譯器

指針能夠初始化給變量,NULL,零。it

指針很靈活,咱們能夠在不一樣的語句中使用同一指針指向不一樣的數據類型,也可使用不一樣的指針指向同一數據變量。編譯

3、經過指針訪問變量

咱們能夠用間接運算符‘*’ (反引用運算符) 來實現對指針變量的值的訪問。 例如:變量

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

故n==179。 特別注意:數據類型

*ptr = 25;

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

4、指針鏈(指向指針的指針)

指向指針的指針變量必須在名稱的前面添加額外的間接運算符。例如:

int **p2;

該聲明語句告訴編譯器 p2 是指向int類型的指針的指針。

5、指針表達式

關於指針所指變量的值的表達式;例如:若是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/p二、p1*p二、p1/3)。指針不能用於除法或乘法運算(p1+p2);相似地,不能對兩個指針進行加法操做。

還可使用關係運算符進行指針的的比較。諸如p1 > p二、 p1 == p2和p1 != p2都是容許的。可是,指向不一樣或無關聯變量的指針間的比較沒有意義。比較能夠用於處理數組和字符串。

6、指針的遞增與比例因

在指針進行遞增時,所增長的值爲該指針指向數據類型的「長度」。這種長度就稱爲比例因子(scale factor)。例如:若是p1爲整形指針,初始值爲2800,那麼通過p1 = p1 + 1運算後p1的值爲2802,而不是2801。

相關文章
相關標籤/搜索