程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 我也要學C語言-第十八章:指向指針的指針(一)

我也要學C語言-第十八章:指向指針的指針(一)

編輯:關於C語言

指向指針的指針到底是什麼
  指針是一種抽象,在計算機中指地址編號,當然你可以把生活中的任何東西進行精心有用的抽象,一個指針在計算機中就相當於地址編號+其對這個地址編號的解釋方式。指針變量呢就是1個代號,通過這個代號可以取得指針的這麼一個東西,為什麼會有變量產生,主要是為了避免程序員直接和地址打交到而產生的變量。指針變量也是變量占內存的,所以指針變量就會它的地址,既然有地址,那麼這個地址就可以給另外一個指針變量,那麼另外的這個指針變量就叫做指向指針的指針。

變量的直接引用與間接引用
通過變量名叫做直接引用,通過指針對變量的引用叫間接引用

間接引用的兩種情況
1,如果在一個指針變量中存放的是一個目標變量的地址叫做一級地址

2,如果在一個指針變量中存放的是指向目標變量的地址的指針變量的地址,那麼這個就叫做二級地址。

怎麼來理解這2句話呢,就是可以這麼比喻。你喜歡1個人,然後在電話本上找到它的號碼(指針)然後你就可以打電話去表白啦!這個就是叫一級地址。再如果,你喜歡1個人,但是你沒有他的電話號碼,但是你知道他妹妹的電話號碼,你就可以拿出電話本查詢找她妹妹的電話號碼(指針)然後通過她妹妹的電話本(指針)最終找到你喜歡的人!也就是說二級指針取內容便得到一級指針,一級指針再取內容就得到了目標變量啦!

注意一個程序指針要是超過了2級,你就該考慮下你的設計是否合理了。

指向指針的指針的例子:

void main(){    int a = 99;    int *pa = &a;    int **ppa = &a;}

大家看這個程序正確嗎?細心的你一下子就反應過來,這樣是絕對不行的,因為類型不匹配呀!會報錯啦!

那麼再看這個程序:

void main(){    int a = 99;    int *pa = &a;    int **ppa = &&a;}

嘿嘿!這樣是不是就可以啦!其實啊!這樣寫也是錯誤的,因為變量取地址就是一個地址常量,地址常量是無法取地址的呢!我們的取地址符只能對有內存空間的東西啦!

所以正確的應該是這樣的:

void main(){    int a = 99;    int *pa = &a;    int **ppa = &pa;}

下面我們再來看一個程序,這個程序明白了,二級指針到底是什麼就一下子就明白啦:

現在我們來一行一行的看:

第一個printf語句 a,這個大家都知道啦,輸出肯定是63啊,因為十進制99,十六進制就是63啊!

第二個printf語句 pa, pa是不是就代表0x0012ff40啊呵呵!一個變量的本質就是避免程序員和地址打交到啦!04的話就是0012ff44啦!對吧!

第三個printf語句 *pa, *pa就是第二句中的0012ff44取內容啊,當然就是63啦!

第四個printf語句 ppa, ppa呢!通過前面的筆記一看就知道它顯示出的值是0012ff40啦!

第五個printf語句,*ppa, *ppa呢!唉!現在看來真是太簡單了,顯示出0012ff44

第六個printf語句,**ppa, **ppa呢就是0012ff44再取內容嘛!63啦!

通過這麼一分析,是不是很簡單啊!絕對不會頭暈吧!呵呵!

這節筆記先就記錄到這裡,在(二)中繼續記錄指向指針的指針的應用。主要是剛才連續學習6小時,有點累了,我要出去走走啦!邊散步邊開心啦!嘿嘿!因為我現在覺得什麼指針的指針的指針的指針。。。。都將是浮雲!

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved