2013-05-08 82 views
0

任何人都可以请帮助我确定我在这里做错了吗?结构中的数组和初始化

我有以下结构:

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

我发现了一个错误:

Expected expression before {

在下面,其中我试图初始化结构中定义的阵列的两行:

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中定义时,我很难做到这一点。

回答

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; 
+0

我还是不能这样初始化它。我将编辑我的帖子,以显示整个代码可能会有助于理解我正在尝试做什么。 – chaser 2013-05-08 04:33:58

+0

@chrolli - 经过编辑以符合您的新问题。 – 2013-05-08 04:43:39

+0

如果我想初始化标记的[]并将[]交叉为[0]以外的其他值,该怎么办?我可以在结构体定义中或在单元初始化期间做到这一点吗? – chaser 2013-05-08 04:50:54

0

grid [0] [0]指的是单元格的一个实例,不是单元格中的任何一个数组。你只被允许在声明初始化数组,这样就可以做的最好是

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

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

+0

这是不行的,我得到一个错误“失踪各地初始括号” – chaser 2013-05-08 04:43:59

+0

在初始化有效C.你的错误是因为你有一些额外的警告开启,这是难能可贵的。不过,如果你能避免这种情况,我认为你不会想完全初始化这个数据结构。这将是很多代码。 – 2013-05-08 04:54:25