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
为什么?
非常感谢任何建议,
答案 0 :(得分:2)
您不能以这种方式初始化指针。你可以这样做:
static struct Device {
char *name;
char *config;
} *app = NULL;
初始化指向NULL
的指针。指针只是一个内存地址。您无法将{ NULL, NULL }
分配给内存地址。
答案 1 :(得分:2)
指针不是结构,而是一个简单的类型,其值是一个地址。
app
变量属于指针类型,则可以使用NULL
进行初始化,但不能使用您使用的大括号语法进行初始化app
变量属于struct Device
类型,您可以使用大括号初始值设定项为NULL
和name
字段提供初始config
值答案 2 :(得分:2)
因为* app是一个指针,所以将它初始化为{NULL,NULL}是错误的,你应该把它初始化为NULL。
在app的情况下,你有一个struct的实际变量实例,所以你初始化struct的成员为NULL,没关系。