該系列文章源於《深刻理解C指針》的閱讀與理解,因爲本人的見識和知識的欠缺可能有誤,還望你們批評指教。數組
一、指針的類型:函數
能夠在聲明指針時,指定指針的類型,例如:指針
(1)void *x 聲明一個無類型的指針,主要是在動態分配內容時,爲了後期的指針轉換方便,而經常使用對象
(2)int *ptrnum 聲明一個int型的指針,通常狀況下,一個指針變量自身佔用4個字節,也就是32位,在64爲系統下,是8個字節,也就是64位,可是隨着指針的類型不一樣,實際的佔用空間(字節)是不一樣的,byte型一個字節,short型兩個字節,long型8個字節等等。內存
(3)指針指向的類型,只有知道指針指向的類型,才能明白指針在內存中的具體分佈狀況。特別是在指針的算術運算時,指針指向的類型決定要分配的內容的分佈。變量
二、指針的值:內存泄漏
(1)指針與其餘通常變量不一樣的是,通常變量名錶明的地址上的16進制的值就是變量對應的值(ASCII碼或UNICODE碼),也能夠是字面量等。引用
(2)而指針變量名對象的地址上的值依舊是個地址,想要獲取內容,必須按照該地值繼續尋找才能獲得指針變量所指向的值。閱讀
(3)對指針變量ptrnum而言,需要使用*指針解析符來完成指針變量對應地址的上的值的引用結構體
(4)其實,指針變量中的地址,只是變量的首字節地址,並不包括全部的地址
(5)指針變量能夠指向變量、數組、結構體、函數、指針等內容,通常用到二級指針就夠了
(6)指針的值是指指針指向的某塊內存區域的首地址,指針的內存區域能夠用使用sizeof關鍵字獲取指針的內存區域的大小,是以字節爲單位,若是想獲取指針上指針類型的大小,需要使用sizeof(指針名稱)/sizeof(指針類型)
三、指針的初始化:
(1)指針在聲明是初始化:int *ptrnum = num;(假設num已經定義),這是使用變量初始化
(2)指針進行動態初始化:int *ptrnum = (int *)malloc(sizeof(int)); 使用malloc函數進行動態分配初始化
(3)對將要不用的指針設置: int *ptrnum = NULL;或 int *ptrnum = 0; 都是將指針釋放前的操做
(4)野指針的出現:int *ptrnum; 只是聲明指針,而不進行初始化出現野指針,野指針是內存泄漏的一種常見狀況