我有这样的结构:
struct DEPT {
char dept_name[20];
int time;
int num;
int check;
struct CAR car;
struct CAR arr[10];
struct DEPT *next_dept;
struct DEPT *prev_dept;
struct DEPT *next_sibling;
};
arr [10]中有一些东西。我有一个函数,我想在函数开始时,arr [10]应该是空的。我怎么能这样做?
实际上,我有一个链表。我没有像struct DEPT部门这样的东西。我尝试了但是它失败了
while (temp != NULL) {
temp=(struct DEPT*){ .arr={(struct CAR){0}} };
sibling = temp->next_sibling;
while (sibling != NULL) {
sibling=(struct DEPT*){ .arr={(struct CAR){0}} };
sibling = sibling->next_sibling;
}
temp = temp->next_dept;
}
答案 0 :(得分:1)
你可以:
struct DEPT dept = {0};
或者:
struct DEPT dept;
memset(&dept, 0, sizeof(dept));
UPDATE:只将struct的dept_name设置为0:
memset(&dept.dept_name, 0, sizeof(dept.dept_name));
答案 1 :(得分:1)
我认为这个例子可以帮助你。
struct xyz
{
int data;
};
struct
{
struct xyz str[3];
struct xyz arr[10];
}abc={.arr[0 ... 2].data = 5 };
int main()
{
printf("....%d\n",abc.arr[0].data);
printf("....%d\n",abc.arr[1].data);
printf("....%d\n",abc.arr[2].data);
printf("....%d\n",abc.str[0].data);
printf("....%d\n",abc.str[1].data);
printf("....%d\n",abc.str[2].data);
}
答案: -
....5
....5
....5
....0
....0
....0
这是非标准的C.你可以将其初始化为部分"没有混合非标准的东西,例如
.arr = { [0].data=5, [1].data=5, [2].data=5 }.