C / C ++で配列を作成して返す次の関数宣言の違いは何ですか?どちらのメソッドも配列を作成して適切な値で埋め、すべてが合格した場合はtrueを返します。
bool getArray(int* array);
bool getArray(int* array[]);
ありがとう
よろしく、STeN
C / C ++で配列を作成して返す次の関数宣言の違いは何ですか?どちらのメソッドも配列を作成して適切な値で埋め、すべてが合格した場合はtrueを返します。
bool getArray(int* array);
bool getArray(int* array[]);
ありがとう
よろしく、STeN
それについて考えるのに役立つなら、それはあるレベルint foo[]
と同じことだということを思い出すことができます。int *foo
したがって、この例では、最初の例にはintへのポインターが渡され、2番目の例にはintへのポインターへのポインターが渡されます。
bool getArray(int *array);
引数としてintへのポインタを取ります(事実上、入力するintの配列)。 bool getArray(int *array[]);
intポインタの配列を取ります。最初のものは必要なものですが、呼び出し元は十分に大きな出力配列を割り当ててgetArray()
、配列要素をそこにコピーできるようにする必要があります。
Cポインタ/配列宣言を理解する1つの方法は、それらを基本型にアクセスする方法を示すものと考えることです。 int *array
と言うと*array
、intを取得することを意味します。 int *array[]
つまり、と言うと*array[x]
、intを取得します。 char (*array)[5][2][3]
つまり、あなたが言うなら(*array)[0 thru 4][0 thru 1][0 thru 2]
、あなたはcharを得るでしょう。
ちなみに、投稿したコードはC++です。「C/C++」のようなものはありません...プロトタイプをC++準拠として認識できるようにするのは、関数の戻り型にデータ型「bool」を使用することです。ブール変数はCでは定義されていません。
2つ目は、配列へのポインターが必要です。したがって、配列が次のint *getme;
場合は、getArray(&getme);