天天看點

第10章 指針(三)對位址進行分類------指針類型

我們已經知道,指針就是首位址。 

       在日常生活中,我們認識了一個人A,而後我們用他的電話聯系他,當然關系好些,可以留下其位址,以便登門拜訪。于是我們用一個本子,記錄下電話和位址,這個記錄電話位址的本子,就是我們常說的電話本兒,現在我們的手機裡面就有電話本,功能強些的電話簿,還有記錄位址的功能。通過位址我們就可以找到他們。是以,記錄位址是我們日常必需的一個工作。 

       在計算機中,   我們定義了一個變量A,而後我們用變量名A通路它,當然深入程式設計,也可留下A的首位址,以便登門拜訪。于是我們需要記錄下A的首位址;C語言中,我們可以使用一個變量B來記錄A的首位址的,這裡的B是一種特殊的變量,是專門用來存放位址的變量;有關這種位址變量的定義,我們會在後面描述。通過B中的位址,我們就可以找到A了。是以,存儲首位址是我們C程式設計必需的一個工作。 

       好,現在,我們首先,對位址簿中,可能的位址,進行分類, 

       日常生活中,我們的位址簿是一個本子,其中人的位址是按照朋友、同學、同僚、親戚、好友等等分類的,而且可以用不同顔色的筆來差別!比如紅筆寫的位址,代表朋友。黑筆,代表同學。黃筆,代表同僚。綠筆,代表親戚。藍筆,代表好友。 

       電腦程式設計中,我們的位址簿中存放的是一些變量或函數的首位址。我們不能用顔色來分類位址,而是按照整型、浮點、字元、數組、函數等等對位址進行分類,分成整型位址、浮點位址、字元位址、數組位址、函數位址等等,也就是說位址是有類型的,這些類型是繁雜的,需要認真加以差別和記憶! 

       1、普通變量首位址的類型: 

           我們已經很熟悉,用int定義的變量,能存放-32768~+32767這個範圍内整數,這種變量的首位址是有類型的,類型是int *,這裡*的意思就是位址類型。 

           例如:有int a;那麼int a的首位址我們簡寫成&a,于是&a的類型就是int * 

           如果說,int變量和int變量的首位址之間有類型的對應關系的話,

           那麼,變量是int類型,相應的,該變量首位址是int *類型,簡寫為:        

                                      int    ---->>>>   int *

同理:float---->>>>float * 

    char---->>>>char *

      unsigned---->>>>unsigned *

      long---->>>>long *

          ..................... 

       2、一維數組首位址的類型: 

           int---->>>>int *     float---->>>>float *     char---->>>>char *; 

           例如:int a[10]; 其首位址就是數組名a , 于是a就是int *類型的。 

           而此數組中,任意一個元素的首位址的類型,也是int *類型的。

   比如a[5]的首位址是&a[5],也是int *類型的

       3、二維數組首位址的類型: 

           假設有2維數組定義如下: 

              int a[3][4]; 

           那麼把int a[3][4],用小括号把數組名括起來變成int (a)[3][4],再把數組名變成*,即int(*)[3][4],接着把表示行數的部分[3]去掉,變成int (*)[4],就是這個2維數組位址的類型。 

                              int a[3][4];          ------>>>>       int (*)[4] 

           一般的,二維int 數組名[數組行數][n]----->>>>int (*)[n],而此二維數組每行必須有n列。 

           于是同理: 

                       二維float 數組名[數組行數][n]----->>>>float (*)[n] 

                       二維char 數組名[數組行數][n]---->>>>char (*)[n] 

       4、函數首位址的類型: 

           對于函數,假設,有函數int F(void){...},那麼,用int (*)(void)作為它的首位址(又稱入口位址)的類型。 

           這個類型是如何來的呢?就是把其函數首部 int F(void),用小括号把函數名括起來變成int (F)(void),再把函數名變成*,即int(*)(void),就是該函數入口位址的類型。 

                          int F(void){...}---->>>>int (*)(void) 

       從上面可以看到,位址類型中,都用到一個* 

       我們已經知道,首位址就是指針,是以上述位址類型,就是指針類型。 

       學習指針的第一關就是能熟悉上面這些繁雜的位址類型的寫法,這,是必須穿越的第一關哦

本文轉自yonghu86 51CTO部落格,原文連結:http://blog.51cto.com/yonghu/1321422,如需轉載請自行聯系原作者

繼續閱讀