在学习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...