在C语言中如何在结构体内初始化数组

6
struct myStruct
{   
    short int myarr[1000];//want to initialize all elements to 0
}

如何初始化数组?

我尝试在结构体内部使用short int* myarr[1000]={0},但是不正确。我该怎么做?我不介意在实现文件中完成。这个结构体包含在头文件中。

4个回答

3

使用通用初始化器:{0}

通用初始化器适用于任何类型,并将元素初始化为正确的0(指针为NULL,整数为0,双精度浮点数为0.0,...):

struct myStruct example1 = {0};
struct myStruct example2[42] = {0};
struct myStruct *example3 = {0};

针对动态分配对象进行编辑。

如果您正在动态分配内存,请使用calloc而不是malloc

p = malloc(nelems * sizeof *p); /* uninitialized objects; p[2] is indeterminate */
q = calloc(nelems, sizeof *q);  /* initialized to zero; q[2] is all zeros */

使用realloc(以及可能出现的其他情况)时,您需要使用memset函数。


1
如果在函数外部声明(不在堆栈上),则整个结构体将在编译时清零。
否则,在声明后可以使用memset

1
只需使用 {0} 初始化结构体的实例,这将同时将您的数组清零。或者,像 NKCSS 演示的那样使用 memset。

0

int不是引用类型,它们在为结构体分配内存后会被初始化吗?

你可以这样做: memset(&myStruct, 0, sizeof(myStruct));


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接