3

我与声明有一个联合:

union test_u
{
    int i;
    char *str;
};

我正在尝试使用以下代码使用“第二个”字段中的数据初始化变量:

union test_u test = {"Sample"};  // char *, not int

在尝试编译它时,我收到错误:

file.c:72:11:警告:初始化从指针生成整数而不进行强制转换

是否可以以与上面相同的方式初始化变量?编译器(在 C89 下)不应该在初始化中接受一个intto吗?char *

4

2 回答 2

5

在 C99 中,这可以使用指定的初始化程序

union test_u test = { .str = "Sample" };
于 2012-06-06T22:27:04.610 回答
2

使用 C89,只有联合的第一个成员被初始化。所以你可以改变联合中变量的顺序:

union test_u
{
    char *str;
    int i;
};
于 2012-06-06T22:33:50.193 回答