2017-12-07 6 views
-1

は私は2つの機能ヘッダーを持って検討差:C++ポインタパラメータの両方の機能パラメータによって構造体の配列を返し

void FunctionOne(int *count, MyStruct **my_structs); 

void FunctionOne(int *&count, MyStruct *&my_structs); 

これら二つの表記の違いは何ですか? 検索しましたが、これらの特定のオプションが比較されて説明されていませんでした。

+1

偶然有効である可能性もあります。もう一つは純粋なC++であり、微妙な間違いがあります。 – StoryTeller

+4

*参考文献*について知っていますか?多分あなたは概念を説明する[良い初心者の本をいくつか入手してください](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)でしょうか? –

+1

**正確に**、それについては不明ですか?最初のものは第2引数としてポインタへのポインタをとりますが、他はポインタ引数への参照をとります。 –

答えて

0

最初のポインタは、変更されたメモリ位置を返す場合は、count = new int(4)を実行したり、新しいメモリに割り当てることができないことを意味するポインタにすぎません。 2番目の方法では、ポインタを新しいメモリ位置に割り当てることができます。これは、参照なしでは、代入演算子をパラメータに使用できないためです。

+0

最初の関数で 'count = new int(4)'を使うことができます。関数から戻ると(他の(メンバー/グローバル)変数ポイントを新しいデータに特に指定しない限り)ポインタを失うので、必ずしもあなたがしたいことではありませんが、間違っているわけではありません。 –

+0

@xEric_xDでも可能ですが、最後にcountの値を変更することはできませんので、 '* count == 4'に変更されることはありません。 –

+0

関数が返ってきたときに "the end"を指定した場合はyesを返します。それは本当だ。しかし、最初の関数が 'count'へのポインタのコピーを作成すると説明した場合、あなたの答えはより明確になると思うのですが、2番目の関数はあなたが説明したように、参照によって取得します。つまり、 'は第2の関数を指していますが、関数から戻っても保持されます。 –

関連する問題