C 结构中的数组和初始化
有人能帮我找出我做错了什么吗 我有以下结构:C 结构中的数组和初始化,c,struct,C,Struct,有人能帮我找出我做错了什么吗 我有以下结构: typedef struct cell { int number; int marked[10]; int crossed[10]; struct cell *next_sibling; }cell; 我得到一个错误: 之前的预期表达式{ 在下面的两行中,我尝试初始化结构中定义的数组: cell grid[10][10]; int main (){ int i = 0, j = 0; int c;
typedef struct cell {
int number;
int marked[10];
int crossed[10];
struct cell *next_sibling;
}cell;
我得到一个错误:
之前的预期表达式{
在下面的两行中,我尝试初始化结构中定义的数组:
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中定义时,我很难做到这一点。这里所做的不是初始化,而是赋值,但您不需要初始化它。C中的全局变量会自动初始化为零。只要填写
number
字段即可e待办事项。如果必须对标记的和交叉的字段执行某些操作,请使用bzero
或memset
:
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][0]引用的是单元格的一个实例,而不是单元格中的任何一个数组。您只能在声明时初始化数组,因此您最好
单元网格[10][10]={0}
在C++中,Struts可以有构造函数——结构和类之间唯一的区别是默认可见性(对于类,对于结构来说是私有的)。< /P>我仍然不能用这种方式初始化它。我将编辑我的文章来显示整个代码,它可能会帮助理解我正在尝试的东西。如果我想初始化标记[]和交叉[],该怎么办?对于0以外的其他值?我可以在结构定义内或在单元格初始化期间执行此操作吗?嗯,您只能在定义处初始化它们,但在配置给定单元格时可以为其内容赋值,是的。答案用一个简单的示例更新。这不起作用,我收到一个错误“初始化器周围缺少大括号”表示初始化是有效的C。你的错误是因为你打开了一些额外的警告,这是值得赞扬的。不过,如果你能避免的话,我不认为你会想要完全初始化这个数据结构。这将是一大堆代码。