一、指針
如果在程式中定義一個變量,在對程式進行編譯,系統會自動給這個變量配置設定記憶體單元,根據不同的類型,配置設定不同長度的空間,如int占用4個位元組,char占用1個位元組。記憶體單元中每個位元組都有編号,這就是位址。由于可通過位址能夠找到所需的變量單元,可以說位址指向該變量單元。打個比方,一個房間的門口挂了一個房間号301,這個301就是房間的位址,将該位址形象化為指針。對于一個記憶體單元來說,單元的位址(編号)即為指針,其中存放的資料才是該單元的内容。
嚴格地說,一個指針是一個位址,是一個常量。而一個指針變量卻可以被賦予不同的指針值,是變量。但常把指針變量簡稱為指針。為了避免混淆,約定:“指針”是指位址,是常量,“指針變量”是指取值為位址的變量。定義指針的目的是為了通過指針去通路記憶體單元。
例如:
int a=12;
int *p=&a;
二、指針的指針(二級指針)
簡單來說,二級指針變量就是一級指針變量的位址。
int a=12;
int *p=&a;
int **=&p;
表達式
相當的表達式
a
12
p
&a
*p
a,12
c
&p
*c
p,&a
**c
*p,a,12
三、指針數組和指針數組
int q[10]; //數組
int *p[10]; //指針數組
int (*r)[10]; //指針數組