如何使用指针传递2d结构数组

时间:2017-06-22 04:03:49

标签: c pointers struct

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结构传递给函数的正确方法是什么,以åŠä¸ºä»€ä¹ˆæˆ‘的工作ä¸èµ·ä½œç”¨ã€‚感谢。

2 个答案:

答案 0 :(得分:2)

我最近也é‡åˆ°è¿‡è¿™ä¸ªé—®é¢˜ã€‚在函数定义标题(和函数声明)中使用Piece (*p)[LEN]而ä¸æ˜¯Piece *p[]。

*p[]将是一个指针数组,而(*p)[]将是指å‘数组的指针。

å°è¯•é˜…读本文:
C pointer to array/array of pointers disambiguation

答案 1 :(得分:0)

Piece * p[]表示指针数组,因此类型错误。

该函数应声明为int readPiece(Piece p[LEN][LEN); 或者,如果您愿æ„,int readPiece(size_t length, Piece p[length][length]);。