數據結構預備知識模塊一:指針及指針變量

在我們數據結構中,我們主要研究的是數據變量以及之間關係的學科,在計算機中數據的存儲是基於連續存儲和離散存儲機制實現的,其中連續存儲顧名思義就是在計算機存儲設備上開闢連續的物理存儲空間來存儲數據,使得數據之間在物理和邏輯上都是相鄰的,因此這樣的實現我們可以藉助“數組”這一數據結構。這一數據結構因爲其內部數據的存儲是連續的,所以其尋址定位就相對簡單化了。我們可以直接進行數據的訪問和操作。對於離散存儲,相反地,就是數據的存儲在物理上不都是相互鄰近的,這就需要解決如何把孤立數據的內存地址連續起來的問題。這裏就用到了“鏈表”的存儲結構實現。鏈表其實很好理解呢,類比武俠小說中的藏寶圖,下一個藏寶圖地點在上一個藏寶圖中做了說明。在這裏指示下一個藏寶圖地點的說明書在計算機裏就是指針(這個例子有點牽強……)。

在C/C++裏面指針就是數據在內存中的地址。因爲在CPU訪問內存空間時需要的是數據的地址*(指針)。我們在編程中使用“*”來標識一個變量是指針變量。例如:

int *p;

這裏*p就是把p標識作爲一個指針變量。p就是一個地址助記符。當程序編譯鏈接時,就會把它轉換成內存中的實際地址。

例如:

int *a,*b,*c;
c = a+b;
// 對指針變量賦值不需要帶*號。假設我們a,b,c的地址分別爲0x100,0x200,0x300.
//那麼上面 的式子在編譯時候就等於:0x300 = (0x100)+(0x200)。其中()是取值符號。表示將地0x100上的值取出來

另外,指針變量存儲了數據的內存地址,同時,通過指針變量可獲得該地址上的數據

int a = 5;
int *p = &a;
printf("%d,%d\n",a,*p);

// output
5,5

注意:“*p”在這裏是取值操作。當給指針變量賦值時不需要加“*”。

例子:

假設一個int變量a, P_a是指向a的指針,那麼“*&a”和“&*p_a”分別表示什麼?

*&a = *(&a) = a

&*P_a = &(*P_a) = p_a;


總結:“*”星號的用途:

1.表示乘號

2.指針變量的標識

3.是一種取值操作,獲取指針變量指向的數據。


下一系列模塊:結構體


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章