初始化结构

时间:2010-11-20 12:59:59

标签: c struct

gcc 4.5.1 c89

使用以下标志进行编译:{{1​​}}

我有以下结构,我试图用默认值初始化。但是,我收到以下警告:

-Wall, -Wextra

警告:

static struct Device {
    char *name;
    char *config;
} *app = { NULL, NULL };

但是,如果我通过声明一个非指针来执行以下操作,我不会遇到任何问题,即

warning: initialization from incompatible pointer type
warning: excess elements in scalar initializer

为什么?

非常感谢任何建议,

3 个答案:

答案 0 :(得分:2)

您不能以这种方式初始化指针。你可以这样做:

static struct Device {
    char *name;
    char *config;
} *app = NULL;

初始化指向NULL的指针。指针只是一个内存地址。您无法将{ NULL, NULL }分配给内存地址。

答案 1 :(得分:2)

指针不是结构,而是一个简单的类型,其值是一个地址。

  • 如果您的app变量属于指针类型,则可以使用NULL进行初始化,但不能使用您使用的大括号语法进行初始化
  • 如果app变量属于struct Device类型,您可以使用大括号初始值设定项为NULLname字段提供初始config

答案 2 :(得分:2)

因为* app是一个指针,所以将它初始化为{NULL,NULL}是错误的,你应该把它初始化为NULL。

在app的情况下,你有一个struct的实际变量实例,所以你初始化struct的成员为NULL,没关系。