指針的實質就是變量,和普通變量沒有區別。
但指針的用途和普通變量有所不同,指針變量應該用于存儲另一個變量的地址,而不是隨意用來儲,一些int類型的數。
指針的出現是為了間接訪問,而c語言的指針起源與匯編語言中的間接訪問(實質是cpu中尋址方式的一種)(cpu有兩種尋址方式直接尋址,間接尋址,特別的是寄存器間接尋址)特別是在arm這種cpu中廣泛采用寄存器尋址這種方式。
間接尋址是cpu本身的特性,這個就決定了匯編語言必須實現間接尋址,就決定了在匯編以上的c語言也必須實現間接尋址。
指針的出現不是偶然,是c語言巧妙的把cpu的寄存器間接尋址和匯編語言間接尋址封裝成了指針這種形式。
高級語言如java、c#沒有指針是如何實現間接訪問呢?
語言本身幫我們封裝了間接尋址的功能,間接使用了指針。
指針標準使用方式
1 定義指針變量
2 給指針變量賦值(綁定指針)
3 解引用
指針變量綁定就是給指針變量賦值,也就是讓指針變量指向另一個變量。當我們沒有綁定之前不能解引用,綁定后才可以。
int a=23;
int *p;//第一步定義指針變量p
p=&a;//第二步綁定指針,讓p指向變量a
p=(int *)4;//另一種綁定指針的方式,讓指針指向地址為4的那個變量。
*p=555;//把555放到指針p指向的那個地址空間里面去。
注意
- 當我們用int *p定義一個指針變量p時,因為p在mian函數里面,是一個局部變量,所以也遵循c語言里面局部變量的一般規律(定義局部變量未初始化,此局部變量中的數字是隨機的)。
- 此時如果解引用p相當于我們訪問了這個隨機數字為地址的內存空間,但此空間能否訪問并不可知,所以解應用前一定要綁定賦值。
- 指針綁定的意義就是讓指針能訪問可以訪問的地方。指針的解引用是為了能夠間接訪問變量。