c语言里,怎样判断共用体union的数据类型?

来源:百度知道 编辑:UC知道 时间:2024/05/23 16:07:09
比如我定义了一个共用体
typedef union {
int n;
char c;
}TElemType;

怎么判断某个TElemType里面的数据到底是int,还是char?

我目前搞不清这样做的必要性和可行性,假设n=0x31,这时c=‘1’,
你说他是int 0x31也就十进制49, 还是字符1呢,显然共用体共用体就是兼而有之嘛,分开来违背了共用体的初衷。也许要从上下文判断吧。

无论是int还是char,在这个类型的变量中,都是存储了同样的值,这个值(二进制形式)是不区分类型的,只有在使用这些值时,才会进行类型转换。

共用体,故名思义,就是int n和char c共同这块内存,根本不存在区分,也无法区分。

比如TElemType t = 0x1234

那么
t.n = 0x1234

t.c = 0x4

程序里你可以用t.n,也可以用t.c

总之,不需要判断是何种类型,也没办法判断

我刚好也在考虑此问题,答案给各位补充完整:

ps:<C语言程序设计现代方法第二版>,该书明确说明。要判断设置的是什么类型的值只有增加标识。

可以这样设计数据结构:

struct mydata{
    int setflag;
    union {
        int state;
        char *msg;
    } data;
};

mydata 自己设计得数据类型,setflag 标识设置的是哪个成员,从上到下可以从union的第一个成员开始:

如果第一个成员被设置,则setflag的最低位置1,其他位清零;

如果第二个成员被设置则,则setflag的倒数第二位置1,其他位清零;

以此类推,int一般是32位的,union最多可以有