初始化结构
问题描述:
GCC 4.5.1的C89初始化结构
具有以下标志编译:-Wall, -Wextra
我有以下的结构,我试图用默认值初始化。不过,我得到以下警告:
static struct Device {
char *name;
char *config;
} *app = { NULL, NULL };
警告:
warning: initialization from incompatible pointer type
warning: excess elements in scalar initializer
但是,如果我通过声明非指针做到以下几点,我没有得到任何的问题,即
static struct Device {
char *name;
char *config;
} app = { NULL, NULL };
这是为什么?
非常感谢任何建议,
答
不能初始化指针的方式。您可以这样做:
static struct Device {
char *name;
char *config;
} *app = NULL;
将指针初始化为NULL
。指针不过是一个内存地址。您不能将{ NULL, NULL }
指定为内存地址。
答
指针不是一个结构,而是一个简单的类型,其值是一个地址。
- 如果您
app
变量是指针类型,可以用NULL
初始化但不与括号语法使用 - 如果
app
变量是struct Device
型的,可以使用支具初始化提供一个初始NULL
价值的name
和config
领域
答
因为*应用程序是因此它初始化为{NULL,NULL}是错误的指针,你应该初始化它只是NULL。
在应用程序的情况下,你有一个结构的实际变量实例,所以你在这里初始化结构的成员为NULL,这是好的。