Apperently在C99,你可以简单地以这种方式初始化静态分配结构
struct sometype {
int a;
double b;
};
sometype a = {
.a = 0;
};
那么,这并不适用于一个结构上类似这样的堆。
struct sometype *a = malloc(sizeof(struct sometype));
*a = {
.a = 0;
};
随着GCC 4.9.2,编译器抱怨
error: expected expression before '{' token
我知道这是愚蠢的,但没有任何语法或技术原因,我不能这样做呢?
有结构的初始化,并分配之间的差异。
当使用堆内存,它总是分配,因为初始化时,你实际上声明实例(不只是一个指针实例)才会发生。
您可以使用复合文字 :
struct sometype *ms = malloc(sizeof *ms);
*ms = ((struct sometype) { .a = 0 });
不过,当然,这可能是不止做更糟:
ms->a = 0;
因为它将写入结构的各个领域,设置了未在字面为零提到的所有领域。 根据你所需要的,这可能是不必要的昂贵。
那么,这并不适用于在堆结构。
是。 它不会。 这是因为在初始化和分配的差异。 的情况下
sometype a = {.a =0};
这是初始化。 在动态分配的情况下
sometype *a = malloc(sizeof(struct sometype);
*a = {.a =0};
有分配。