關於C++二維指標

來源:互聯網
上載者:User
二維數組指標

  源文地址:http://www.cnblogs.com/carekee/articles/1948326.html

 

 概括的說,指標其實就是可變數組的首地址,說是可變數組,是
指其包含內容的數量的可變的,並且是可動態申請和釋放的,從而充
分節約寶貴的記憶體資源。我一向喜歡一維數組,除非萬不得已,我一
般是不用二維數組的,多維的則更是很少涉足了。因為一維簡單,容
易理解,而用指標指向的多維陣列就具有相當的複雜性了,也因此更
具有討論的必要。
    閑話少說,這裡我就以三個二維數組的比較來展開討論:
    (1)、int **Ptr;
    (2)、int *Ptr[ 5 ];
    (3)、int ( *Ptr )[ 5 ];
    以上三例都是整數的二維數組,都可以用形如 Ptr[ 1 ][ 1 ] 的
方式訪問其內容;但它們的差別卻是很大的。下面我從四個方面對它們
進行討論:
    一、內容:
       它們本身都是指標,它們的最終內容都是整數。注意我這裡說
的是最終內容,而不是中間內容,比如你寫 Ptr[ 0 ],對於三者來說,
其內容都是一個整數指標,即 int *;Ptr[ 1 ][ 1  ] 這樣的形式才
是其最終內容。
    二、意義:
       (1)、int **Ptr 表示指向"一群"指向整數的指標的指標。
       (2)、int *Ptr[ 5 ] 表示指向 5 個指向整數的指標的指標。
       (3)、int ( *Ptr )[ 5 ] 表示指向"一群"指向 5 個整數數
組的指標的指標。
    三、所佔空間:
       (1)、int **Ptr 和 (3)、int ( *Ptr )[ 5 ] 一樣,在32位平
台裡,都是4位元組,即一個指標。
       但 (2)、int *Ptr[ 5 ] 不同,它是 5 個指標,它佔5 * 4 = 20
個位元組的記憶體空間。
    四、用法:
       (1)、int **Ptr 
       因為是指標的指標,需要兩次記憶體配置才能使用其最終內容。首
先,Ptr = ( int ** )new int *[ 5 ];這樣分配好了以後,它和(2)的
意義相同了;然後要分別對 5 個指標進行記憶體配置,例如:
  Ptr[ 0 ] = new int[ 20 ];
  它表示為第 0 個指標分配 20 個整數,分配好以後, Ptr[ 0 ] 為指
向 20 個整數的數組。這時可以使用下標用法 Ptr[ 0 ][ 0 ] 到
Ptr[ 0 ][ 19 ] 了。
      如果沒有第一次記憶體配置,該 Ptr 是個"野"指標,是不能使用
的,如果沒有第二次記憶體配置,則 Ptr[ 0 ] 等也是個"野"指標,也
是不能用的。當然,用它指向某個已經定義的地址則是允許的,那是另外
的用法(類似於"借雞生蛋"的做法),這裡不作討論(下同)。
      (2)、int *Ptr[ 5 ]
      這樣定義的話,編譯器已經為它分配了 5 個指標的空間,這相當
於(1)中的第一次記憶體配置。根據對(1)的討論可知,顯然要對其進行一次
記憶體配置的。否則就是"野"指標。
      (3)、int ( *Ptr )[ 5 ]
      這種定義我覺得很費解,不是不懂,而是覺得理解起來特別吃力,
也許是我不太習慣這樣的定義吧。怎麼描述它呢?它的意義是"一群"
指標,每個指標都是指向一個 5 個整數的數組。如果想分配 k 個指標,
這樣寫: Ptr = ( int ( * )[ 5 ] ) new int[ sizeof( int ) * 5 * k ]。
這是一次性的記憶體配置。分配好以後,Ptr 指向一片連續的地址空間,
其中 Ptr[ 0 ] 指向第 0 個 5 個整數數組的首地址,Ptr[ 1 ] 指向第
1 個 5 個整數數組的首地址。
   綜上所述,我覺得可以這樣理解它們:
   int ** Ptr <==> int Ptr[ x ][ y ];
   int *Ptr[ 5 ] <==> int Ptr[ 5 ][ x ];
   int ( *Ptr )[ 5 ] <==> int Ptr[ x ][ 5 ];
   這裡 x 和 y 是表示若干的意思。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.