2011-12-03 56 views
2

關於C++多維數組已經有很多問題已經問過,雖然沒有一個A)完全解釋了我想要問的東西或B)也許我只是不明白它。C++多維數組和指針名稱包圍

我的問題:

int (*ip)[4]; 

我是理解在這種情況下將圍繞* IP括號的原因的問題。綜觀多維數組:

int ia[3][4]; 
int *ip = &ia[2]; 
int *ip2[4] = &ia[2]; 
int (*ip3)[4] = &ia[2]; 

IP,IP2,IP3和都是旨在在IA位置以指向該陣列的第一個元素[2]。

  1. IA [2]僅僅是一個指針,它指向數組的第一個元素,依此& IA [2]是指針的地址?正確?
  2. 在我看來,ip可以使用,因爲它會以同樣的方式工作,char *會工作...是嗎?沒有?
  3. 對我來說ip2不正確。對我而言,ip2是一個指向數組的指針數組,當我想要的是一個指向int數組的指針時。
  4. 我知道ip3是正確的。爲什麼?因爲這本書是這麼說的。就是這樣。我不明白括號的意義。

那麼括號如何改變呢?我真的在這裏進行了一個概念性的解釋,所以我可以在將來理解和重用這個概念。

再次感謝您的時間每個人,我在這裏仍然是新的,所以如果有什麼我可以做,以改善我的問題,請讓我知道。

+1

[cdecl](http://cdecl.org/)可能會在未來幫助你一些 –

+0

第四個是正確的,因爲在C++中運算符[]的優先級高於運算符*,所以你得到一個4個指向int的數組 – Yappie

+0

@SethCarnegie cdecl太棒了!謝謝! – Jace

回答

3
  1. 第一個:

    ​​

    是無效的。 &ia[2]int[4]的地址,因此它的類型爲int (*)[4],因此不能用於初始化int *。然而,你可以這樣寫:

    int *ip = ia[2]; 
    

    哪些現在做你期望的。

  2. 不,見上文。

  3. 確實。

  4. 這是正確的,因爲這是正確的語法。從中間開始向外工作。 (*ip3)表示ip3是指向某物的指針。向外工作,它指向的是int[4]

+0

真的嗎?我希望'&ia [2]'的類型爲int(*)[4]',就像OP一樣。我比你更經常犯錯。 –

+0

@Mooing:是的,這是我的錯字! –

+0

這很有道理。非常感謝你。 「從中間開始,向外努力」的句子就是在我心中鞏固了它。 – Jace

0

括號用於指示誰是指針。

int *ip1[4]; 
int (*ip2)[4]; 

ip1是4個指針的數組,以int
ip2是指向數組4 int s的指針。