2017-12-31 132 views
4

cとC++の2次元配列の要素の型は何ですか?

int arr[2][3] = ... 

arr[0]のタイプは、Googleが私の質問については何も伝えていない

int (*)[3] // pointer to int[3], which is a pointer. 

それとも

int[3] // an array whose size is 3, which is an array. 

です。

私はポインタと配列が異なる型(派生型)であることを知っています。

多分CとC++は違った扱いをしているかもしれませんが、私は標準的な言葉遣いを見たいと思います。

+0

@coderredocありがとう。私はそれが配列とポインタの間の変換については疑問だが、わからない。今それは解決される。 – czxyl

+0

ハッピー学習とすべての最高。 – coderredoc

答えて

15

arr[0]は、ポインタではないint [3]です。

int (*p)[3]は、タイプがint(*)[3]であり、3要素の配列へのポインタです。

ポインタは配列ではなく、配列はポインタではありません。その後すぐ

、関数(または減衰が発生し、任意の場合)には、この2次元配列を渡すことがint (*)[3]ある最初の要素へポインタに減衰します。

C 2d配列は配列の配列に過ぎません。

  • arrを解剖

    再び3要素を持つ配列である要素の各々がアレイです。 (sizeofなどを除く)ほとんどの場合、それが含む最初の要素へのポインタには、int*である。

  • arr[0][0]は、intである。

  • 最後に&arr[0]です。これはタイプがint(*)[3]です。

+0

コメントは議論の対象外です。この会話は[チャットに移動]されています(http://chat.stackoverflow.com/rooms/162259/discussion-on-answer-by-coderredoc-whats-the-type-of-2d-arrays-element-in-できる)。 –