2017-09-12 20 views
0

問題は私がvoid foo(char* &arr,...)のようなパラメータを取る関数に配列char arr[6] = {"1","2",etc.}を渡そうとしていて、うまくいかないということです。誰も私にそれを説明することはできますか?参照渡しですか?

+5

配列はポインタではないためです。ポインタは配列ではありません – StoryTeller

+2

これらの質問は[ここ](https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list/388282)に回答しています。 – nwp

+1

[参照渡しの可能な複製]の可能な複製(https://stackoverflow.com/questions/5724171/passing-an-array-by-reference) – AMA

答えて

6

char arr[6]は配列です。

char* &arrは、ポインタへの(n値)参照です。

引数は正しい型ではないため、変換する必要があります。配列は、最初の要素へのポインタへの暗黙的な崩壊(崩壊は一種の変換です)です。

しかし、この衰弱したポインタは一時的な値です(右値)。非const左辺値参照は右辺値を参照することができないので、配列引数を使用してfooを呼び出すと不正な形になります。


ポインタ変数を作成できます。それはfooに渡すことができる。

char* ptr = arr; 
foo(ptr, ...); 

関数は、そのポインタを変更することができる(すなわち、それはいくつかの他のcharオブジェクトをポイントする)、参照は非constからです。


PS。あなたの配列の初期化には非常に間違ったことがあります。 "1"および"2"は、charオブジェクトではありません。