在C中初始化struct里面的数组

时间:2011-04-07 09:40:44

标签: c arrays struct initialization header-files

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

如何初始化阵列?

我尝试在结构体内做short int* myarr[1000]={0},但这是错误的。我怎样才能做到这一点?我不介意在实现文件中这样做。该结构包含在头文件中。

4 个答案:

答案 0 :(得分: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 :(得分:1)

如果它是从函数声明的(不在堆栈上),整个结构将在编译时归零。

否则,您可以在声明后使用memset

答案 2 :(得分:1)

只需使用{0}初始化结构的实例,这也会使您的数组归零。或者,使用memset作为NKCSS演示。

答案 3 :(得分:0)

int的引用类型,在为结构分配内存后是不是会初始化?

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