0
問題は私がvoid foo(char* &arr,...)
のようなパラメータを取る関数に配列char arr[6] = {"1","2",etc.}
を渡そうとしていて、うまくいかないということです。誰も私にそれを説明することはできますか?参照渡しですか?
問題は私がvoid foo(char* &arr,...)
のようなパラメータを取る関数に配列char arr[6] = {"1","2",etc.}
を渡そうとしていて、うまくいかないということです。誰も私にそれを説明することはできますか?参照渡しですか?
char arr[6]
は配列です。
char* &arr
は、ポインタへの(n値)参照です。
引数は正しい型ではないため、変換する必要があります。配列は、最初の要素へのポインタへの暗黙的な崩壊(崩壊は一種の変換です)です。
しかし、この衰弱したポインタは一時的な値です(右値)。非const左辺値参照は右辺値を参照することができないので、配列引数を使用してfoo
を呼び出すと不正な形になります。
ポインタ変数を作成できます。それはfoo
に渡すことができる。
char* ptr = arr;
foo(ptr, ...);
関数は、そのポインタを変更することができる(すなわち、それはいくつかの他のchar
オブジェクトをポイントする)、参照は非constからです。
PS。あなたの配列の初期化には非常に間違ったことがあります。 "1"
および"2"
は、char
オブジェクトではありません。
配列はポインタではないためです。ポインタは配列ではありません – StoryTeller
これらの質問は[ここ](https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list/388282)に回答しています。 – nwp
[参照渡しの可能な複製]の可能な複製(https://stackoverflow.com/questions/5724171/passing-an-array-by-reference) – AMA