【问题标题】: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));

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-09-23
            • 2010-12-06
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多