1週間前にC言語の学習を始めました。 テストのために、私はtictactoeゲームを書くことに決めました。2次元配列をC言語の関数に渡す方法
私にはフィールドがあります。
int field[3][3];
そして
void printField(int field[3][3]){
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
printf("%i", field[i][j]);
}
printf("\n");
}}
をprintField機能それは、このようにメインで働いています:
int main(){
printField(field);}
しかし、私は
void printField(int field){...}
または
を変更した場合void printField(int field[][]){...}
それは私にエラーの束を与える:
subscripted value is neither array nor pointer nor vector
passing argument 1 of ‘printField’ makes integer from pointer without a cast
note: expected ‘int’ but argument is of type ‘int (*)[3]’
私はこのような配列を渡すことができないのはなぜ? これ以上の方法はありますか?
よく 'int'は' int'変数を単一の 'int'変数として宣言します。それは明らかに間違っています。単一の整数は配列ではなく、配列の配列ではありません。そして、 'int field [] []'は単純に許可されていません。エラーメッセージに示されているように、あなたが働いている方法か 'int(* field)[3]'か、 。 –
配列はポインタとして渡されるので、実際の番号を送信せずに番号を指す(配列内の最初のもの)ため、 'int field'は機能しません。 int * field、int field []はcと同じですが、2番目の構文はコードの可読性のための砂糖です。 – kabanus
私は理解したように、フィールドを再利用可能にする方法はありません。すでに宣言していてサイズはprintField()でもう一度渡す必要がありますか? –