1. 程式人生 > >剖析一級指標和二級指標

剖析一級指標和二級指標

        首先我們要理解指標這個概念,那麼什麼是指標呢?

        指標是程式語言中的一個物件,利用地址,它的值直接指存在電腦儲存器中另一個地方的值。由於通過地址能找到所需的變數單元,可以說,地址指向該變數單元。因此,將地址形象化的稱為“指標”。意思是通過它能找到以它為地址的記憶體單元。

        總而言之,指標就是用來存放地址的,可以通過指標所指向的地址找到所指向記憶體單元的內容。

一級指標:   

        我們可以形象化的把記憶體單元當作一個房間,房間裡的東西就相當於是記憶體單元中存放的內容,那麼指標就可以看作是這個房間的門牌號,這裡的門牌號就相當於地址,給你了門牌號,你就可以通過門牌號找到這個房間了。也就是上面所說的通過指標所指向的地址找到所指向記憶體單元的內容。

       假設上面有一段記憶體單元,裡面分別儲存著1,2,3,4。現在有一個指標變數p指向 1 所在的記憶體空間,這塊記憶體空間的地址是0x01AC7F82,指標是用來存放地址的,所以指標p裡存放的是地址0x01AC7F82。

       定義一個指標變數p:                    int a = 1;

                                                           int * p = &a;

       這裡你把它寫成這樣                   int *      p = &a;

       為什麼要在中間空這麼多呢,你可以將前面的 int * 看作是一個型別,就好比 int型 ,char型這種,這裡它表示的是一個指標型別,只不過它是指向整形int型別的指標變數;同理char * 也是指標型別,只不過它是指向字元char型別的指標變數。

       後面的 p 是一個變數,即所謂的指標變數,這個變數所存放的就是變數a存放的內容的地址。

二級指標:

       理解了一級指標,二級指標也不難理解,通過一級指標我們可以得到這個變數的地址,那麼二級指標就可以得到這個變數地址的地址。這裡看個圖理解一下:

       這裡定義一個變數 a = 1; 定義一個一級指標pa 指向變數a; 又定義了一個二級指標 ppa 指向指標變數 pa。

       指標變數pa 取到的是變數a所在記憶體單元的地址0x0056780A,

       二級指標變數ppa 取到的是一級指標變數pa 所在記憶體單元的地址 0x00808001。

 

       同理一級指標與二級指標已經理解了,那麼多級指標也就可以理解了,只是指標越多越複雜,所以一般解決問題時不用更高階的指標。