typedef struct piece Piece;
struct piece{
char color;
char symbol;
};
int readPiece(Piece * p[]);
//私のコードはかなり長いため、私はそれらのすべてをここに入れなかった。ポインタを使って構造体の2次元配列を渡す方法
int main(void){
int row = 0;
int col = 0;
Piece input[LEN][LEN];
readPiece(input);
return 0;
}
// 16 * 2の特定の文字を読み込みます。
int readPiece(Piece * p[]){
int row = 0;
int col = 0;
while(row < LEN){
col = 0;
while(col < LEN){
scanf("%c%c",&(p[row][col] .color), &(p[row][col].symbol));
if((p[row][col].color == 'R' || p[row][col].color == 'G' || p[row][col].color == 'B' || p[row][col].color == 'Y') && (p[row][col] . symbol == '*' || p[row][col].symbol == '^' || p[row][col].symbol == '#' || p[row][col].symbol == '$')){
getchar();
}else{
return 0;
}
col ++;
}
row ++;
}
return 1;
}
//私はちょうどC言語の学習を始めます。私は2d構造体を関数のポインタに渡そうとしますが、コンパイルすると '互換性のないポインタ型が渡ります'というメッセージが表示されます。 2d構造体を関数に渡す正しい方法と、なぜ私が機能していないのかを尋ねたいと思います。ありがとう。
あなたが提供した内容は、MCVE([MCVE])にかなり近いようです。 'LEN'を定義し、' 'を含める必要があるように見えますが、それはすべてです。より多くを提供することは良いことではないでしょう。それで、うまくやった。なぜ 'int readPiece(Piece p [LEN] [LEN]);'を使わないのですか?それは構造型の2D配列を渡す合理的な方法のようです。 (あなたは 'main'の' '行' '' col''を使用しません) –
ええとint readPiece(Piece [LEN] [LEN])は動作しますが、今はポインタを学習しています。私は練習したいだけで、なぜこの方法がうまくいかないのか理解できません。または、代わりに** pを使用する必要がありますか?Thx –
関数に2次元配列を渡すのと同じです。 https://stackoverflow.com/questions/16724368/how-to-pass-a-2d-array-by-pointer-in-c –