【问题标题】:initialize array inside struct in C在C中初始化结构内的数组
【发布时间】:2011-04-07 09:40:44
【问题描述】:
struct myStruct
{
short int myarr[1000];//want to initialize all elements to 0
}
如何初始化数组?
我尝试在结构中执行short int* myarr[1000]={0},但它是错误的。我怎样才能做到这一点?我不介意在实现文件中这样做。该结构包含在头文件中。
【问题讨论】:
标签:
c
arrays
struct
initialization
header-files
【解决方案1】:
使用通用初始化器:{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。
【解决方案2】:
如果它是在函数之外(不在堆栈上)声明的,则整个结构将在编译时清零。
否则,你可以在声明后使用memset。
【解决方案3】:
只需使用 {0} 初始化结构的一个实例,这也会将您的数组归零。或者,像 NKCSS 演示的那样使用 memset。
【解决方案4】:
int 不是引用类型,在为你的结构分配内存后它们不会被初始化吗?
你可以这样做:
memset(&myStruct, 0, sizeof(myStruct));