c语言里,怎样判断共用体union的数据类型?
来源:百度知道 编辑:UC知道 时间:2024/05/23 16:07:09
比如我定义了一个共用体
typedef union {
int n;
char c;
}TElemType;
怎么判断某个TElemType里面的数据到底是int,还是char?
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最多可以有