2017-06-22 22 views
1

私はC++を学ぼうとする初心者です。私の質問が正しく構成されていないとお詫びですか?私は配列を使って作業していましたが、&を使わずに関数を使って配列に格納された値を操作したり、参照記号で渡すことができることが分かりました。 &の欠如が値渡しとなり、操作されたコピーが作られていることを意味するので、これがどういうことか分かりません。配列はC++でどのように参照や値、ポインタによって渡されますか?

他の箇所では、データを操作するために明示的逆参照を使用しなかった場合、ポインタがポインタを渡すことを読んでいます。配列を渡したときに実際に起こっていることを説明してください。

サイドノート:2D配列を関数に渡すときに列サイズを指定する必要があるのはなぜですか?

+0

配列が崩壊することができます最初の要素へのポインタへのポインタであり、値は関数に渡されるポインタです。このポインタの崩壊は、生の配列を避け、代わりに適切なコンテナの型を使用する理由の1つです(おそらく 'std :: vector') – user463035818

+0

配列はポインタによって渡されます。 arr [i]を使用すると、*(arr + i)と等価です。ここで、arrは配列の開始アドレスです。 – user1438832

+1

...私はコメントに答えるべきではありませんが、完全な複製があることを確信しています。 – user463035818

答えて

2

C-アレイがポインタに減衰します。

いくつかの宣言があまりにも

void foo(const char name[42]); 

を誤解しているだけの参照/ポインタ(醜い構文:/)実際には

void foo(const char* name); 

あるサイズを維持することができます:

void foo(const char (&name)[42]); 
void foo(const char (*name)[42]); 
+0

'void foo(const char [42]&name)'よりもうまくいくかどうかは... – DeiDei

+0

これは、 '' T []の代わりに '' std :: array''を使うべき理由の1つです。 ''それは崩壊しないので混乱は少なくなります – nefas

関連する問題