我有工会,好吧。
这个联合在一个结构内,并且那个联合是未命名的(类似的东西)。
typedef enum TYPES {INT, FLOAT, CHAR, POINTER TO FUNCTION /* Please pay attention on this */};
typedef struct {
TYPES type;
union {
int integer;
float real;
char letter;
char *string;
/* here we have a pointer to function syntax but I don't remember how to write it right now*/
}
} MY_STRUCT;
我将像这样初始化我的结构。
MY_STRUCT test = {INT, 22};
好的,我知道这项工作是因为,根据定义,当我使用这种初始化时,将使用联合的第一个字段。
所以问题是:
如果我这样写初始化会发生什么?
MY_STRUCT test = {INT, 22.2};
当我尝试检索浮点值后,我会得到正确的值吗?
float var = (float)test.real;
这会显示正确的东西吗?
这适用于每种类型吗?甚至指向功能一的指针?
我问这个是因为根据定义,初始化将值放在我的联合的第一个字段中,所以,如果 float 大于 int 会有问题吗?我不知道这一点,所以,我知道指向函数的指针有时可能比 int 大,所以我需要用指向函数的指针作为第一个成员编写我的联合?
我读到 GCC 支持类型双关,甚至 linux 内核也使用类型双关。所以我只担心我是否可以在该结构上使用这种初始化,然后获得正确的值。