指針是一個存儲計算機內存地址的變量。從指針指向的內存讀取數據稱做指針的取值。指針能夠指向某些具體類型的變量地址,例如int、long和double。指針也能夠是void類型、NULL指針和未初始化指針。web
根據出現的位置不一樣,操做符 * 既能夠用來聲明一個指針變量,也能夠用做指針的取值。當用在聲明一個變量時,*表示這裏聲明瞭一個指針。其它狀況用到*表示指針的取值。spa
&是地址操做符,用來引用一個內存地址。經過在變量名字前使用&操做符,咱們能夠獲得該變量的內存地址。指針
1
2
3
4
5
6
7
8
9
|
// 聲明一個int指針
int
*ptr;
// 聲明一個int值
int
val = 1;
// 爲指針分配一個int值的引用
ptr = &val;
// 對指針進行取值,打印存儲在指針地址中的內容
int
deref = *ptr;
printf
(
"%d\n"
, deref);
|
第2行,咱們經過*操做符聲明瞭一個int指針。接着咱們聲明瞭一個int變量並賦值爲1。而後咱們用int變量的地址初始化咱們的int指針。接下來對int指針取值,用變量的內存地址初始化int指針。最終,咱們打印輸出變量值,內容爲1。code
第6行的&val是一個引用。在val變量聲明並初始化內存以後,經過在變量名以前使用地址操做符&咱們能夠直接引用變量的內存地址。orm
第8行,咱們再一次使用*操做符來對該指針取值,可直接得到指針指向的內存地址中的數據。因爲指針聲明的類型是int,因此取到的值是指針指向的內存地址存儲的int值。內存
說穿了,指針就是地址吧,這裏能夠把指針、引用和值的關係類比爲信封、郵箱地址和房子。一個指針就好像是一個信封,咱們能夠在上面填寫郵寄地址。一個引用(地址)就像是一個郵件地址,它是實際的地址。取值就像是地址對應的房子。咱們能夠把信封上的地址擦掉,寫上另一個咱們想要的地址,但這個行爲對房子沒有任何影響。ci