typedef struct piece Piece;
struct piece{
char color;
char symbol;
};
int readPiece(Piece * p[]);
//因爲我的代碼很長。我沒有把他們全部放在這裏。如何使用指針傳遞二維數組結構
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]);'?這似乎是傳遞結構類型的二維數組的一種合理的方式。 (你不要在縮小的main()中使用'row'或'col'。) –
是的,我知道int readPiece(Piece p [LEN] [LEN])會工作,但我正在學習指針。我只是想練習,我不明白爲什麼這種方法不起作用。還是應該使用** p來代替?Thx –
就像在函數中傳遞2d數組一樣。 https://stackoverflow.com/questions/16724368/how-to-pass-a-2d-array-by-pointer-in-c –