首页 > C联合体赋值报错?

C联合体赋值报错?

在学习C语言的联合体,关于联合的赋值的疑问。定义两个类型,如下代码:

typedef struct {
    char *name;
    float price;
} product;

typedef struct {
    char *name;
    int  age;
} people;

然后定义如下的联合体:

 union {
        product pro;
        people peo;
    } info;
    
info.pro = {"apple", 22.2};

赋值时发生报错,报错:
In function ‘main’:
/home/mao/ClionProjects/c/main.c:19:18: error: expected expression before ‘{’ token

但是加上类型转换就不会了,

info.pro =  (product){"apple", 22.2};

或者这样赋值:

union {
    product pro;
    people peo;
} info = {"apple", 22.2};

通过最后一种方式赋值默认是赋给第一个pro,不明白的是info.pro = {"apple", 22.2};已经指定赋值给pro,而pro的类型是确定的,为啥还会报错呢?不应该直接当成product类型吗?
代码:

#include <stdio.h>

typedef struct {
    char *name;
    float price;
} product;

typedef struct {
    char *name;
    int  age;
} people;


int main()
{
    union {
        product pro1;
        people peo1;
    } info;

    info.pro1 = {"apple", 22.2};

    return 0;
}

最后的写法是在初始化,允许始用初始化列表
出错的地方你在赋值,赋值不能直接用初始化列表,除非显式转换


union的关系不大,这是C语言结构体赋值的问题。c语言允许直接对结构体初始化,或者在赋值的时候加上类型说明,或者是逐一赋值,但info.pro1 = {"apple", 22.2};,这种方式在c语言里是不被允许的。http://stackoverflow.com/ques...

【热门文章】
【热门文章】