结构和初始化中的数组

时间:2013-05-08 04:27:12

标签: c struct

任何人都可以帮我确定我在这里做错了什么吗?

我有以下结构:

typedef struct cell {
    int number;
    int marked[10];
    int crossed[10];
    struct cell *next_sibling;
}cell;

我收到了一个错误:

  

{

之前的预期表达

在下面的两行中,我尝试初始化struct中定义的数组:

cell grid[10][10];

int main (){
    int i = 0, j = 0;
    int c;
    while (getchar() != EOF){
        grid[i][j].number = c - '0';
        grid[i][j].marked = {0};
        grid[i][j].crossed = {0};
        ... and so on
    }

}

我通常能够初始化一个空数组。但是当它在struct中定义时,我很难做到这一点。

2 个答案:

答案 0 :(得分:0)

你在这里做的不是初始化,而是分配,但你不需要初始化它。 C中的全局变量自动进行零初始化。如果您需要做的就是填写number字段。如果您必须对markedcrossed字段执行某些操作,请使用bzeromemset

bzero(grid[i][j].marked, sizeof grid[i][j].marked);
memset(grid[i][j].marked, 0, sizeof grid[i][j],marked);

如果要分配特定值,您当然也可以这样做:

grid[i][j].marked[3] = 17;

答案 1 :(得分:0)

grid [0] [0]指的是单元格的实例,而不是单元格中的任何一个数组。您只能在声明时初始化数组,因此您可以做的最好的事情是

单元网格[10] [10] = {0};

在C ++中,结构体可以有构造函数 - 结构体和类之间的唯一区别是默认可见性(类为私有,结构为public)。