C語言_初步瞭解一下指標

OldBoy~發表於2017-12-28

       指標的基本概念 在計算機中,所有的資料都是存放在儲存器中的。 一般把儲存器中的一個位元組稱為一個記憶體單元, 不同的資料型別所佔用的記憶體單元數不等,如整型量佔2個單元,字元量佔1個單元等。為了正確地訪問這些記憶體單元, 必須為每個記憶體單元編上號。 根據一個記憶體單元的編號即可準確地找到該記憶體單元。記憶體單元的編號也叫做地址。 既然根據記憶體單元的編號或地址就可以找到所需的記憶體單元,所以通常也把這個地址稱為指標。 記憶體單元的指標和記憶體單元的內容是兩個不同的概念。 可以用一個通俗的例子來說明它們之間的關係。我們到銀行去存取款時, 銀行工作人員將根據我們的帳號去找我們的存款單, 找到之後在存單上寫入存款、取款的金額。在這裡,帳號就是存單的指標, 存款數是存單的內容。對於一個記憶體單元來說,單元的地址即為指標, 其中存放的資料才是該單元的內容。在C語言中, 允許用一個變數來存放指標,這種變數稱為指標變數。因此, 一個指標變數的值就是某個記憶體單元的地址或稱為某記憶體單元的指標。 定義指標的目的是為了通過指標去訪問記憶體單元。

        既然指標變數的值是一個地址, 那麼這個地址不僅可以是變數的地址, 也可以是其它資料結構的地址。在一個指標變數中存放一
個陣列或一個函式的首地址有何意義呢? 因為陣列或函式都是連續存放的。通過訪問指標變數取得了陣列或函式的首地址, 也就找到了該陣列或函式。這樣一來, 凡是出現陣列,函式的地方都可以用一個指標變數來表示, 只要該指標變數中賦予陣列或函式的首地址即可。這樣做, 將會使程式的概念十分清楚,程式本身也精練,高效。在C語言中, 一種資料型別或資料結構往往都佔有一組連續的記憶體單元。 用“地址”這個概念並不能很好地描述一種資料型別或資料結構, 而“指標”雖然實際上也是一個地址,但它卻是一個資料結構的首地址, 它是“指向”一個資料結構的,因而概念更為清楚,表示更為明確。 這也是引入“指標”概念的一個重要原因。

對指標變數的型別說明包括三個內容:
(1)指標型別說明,即定義變數為一個指標變數;
(2)指標變數名;
(3)變數值(指標)所指向的變數的資料型別。

(4)指標事實上是一種資料型別,和int 基本型別一樣。指標也是一種變數,佔有記憶體空間,儲存的是記憶體地址。

(5)關於*p操作

(1)在宣告指標中,“*”號表示所宣告的變數是一個指標。

(2) 在指標使用時,“*”號表示操作指標所指向的記憶體空間中的值。

(3)當*p放在等號的左邊時,相當於給記憶體賦值。

(4)當*p放在等號的右邊時,相當於從記憶體中獲取值。

int *p = NULL;//宣告p是一個指標變數  
int i = 3,j = 0;  
p = &i;//p指向i所在記憶體  
*p = 5;////將p所指的記憶體的值改變為5,此時變數i的值也是5  
j = *p;//將*p把指的記憶體空間的值(i的值)賦值給j

 

相關文章