一維指針與一位數組的關係(轉載\整理)

如有以下定義:
   int a[10], *pa;
   pa=a;
 
  則pa=&a[0]是將數組第1個元素的地址賦給了指針變量pa。
 
  實際上,C語言中數組名就是數組的首地址,因此第一個元素的地址能夠用兩種方法得到:pa=&a[0]或pa=a。
 
  這兩種方法在形式上相像,其區別在於:pa是指針變量,a是數組名。值得注意的是:pa是一個能夠變化的指針變量,而a是一個常數。由於數組一經被說明,數組的地址也就是固定的,所以a是不能變化的,不容許使用a++、++a或語句a+=10,而pa++、++pa、pa+=10則是正確的。因而可知,此時指針與數組融爲一體。數組

  一維數組是一個線形表,它被存放在一片連續的內存單元中。C語言對數組的訪問是經過數組名(數組的起始地址)加上相對於起始地址的相對量(由下標變量給出),獲得要訪問的數組元素的單元地址,而後再對計算出的單元地址的內容進行訪問。一般把數據類型所佔單元的字節個數稱爲擴大因子。
  實際上編譯系統將數組元素的形式a[i]轉換成*(a+i),而後才進行運算。對於通常數組元素的形式:<數組名>[<下標表達式>],編譯程序將其轉換成:*(<數組名>+<下標表達式>),其中下標表達式爲:下標表達式*擴大因子。整個式子計算結果是一個內存地址,最後的結果爲:*<地址>=<地址所對應單元的地址的內容>。因而可知,C語言對數組的處理,其實是轉換成指針地址的運算。
  數組與指針暗中結合在一塊兒。所以,任何能由下標完成的操做,均可以用指針來實現,一個不帶下標的數組名就是一個指向該數組的指針。指針

相關文章
相關標籤/搜索