一、如何判断联合体中存储的数据类型
 1 #include <stdio.h>
 2 
 3 /* 结构体 */
 4 typedef struct{    
 5     short b;//1 2 3 判断联合体中存储的数据的类型
 6     union {
 7         int num;
 8         char ch;
 9         double d;
10     }u;    
11 }INFO;
12 
13 int main()
14 {    
15     INFO info1,info2,info3;
16     info1.b = 1;
17     info1.u.num = 15;
18     info2.b = 2;
19     info2.u.ch = 'A';
20     info3.b = 3;
21     info3.u.d = 0.001;
22     if(info1.b==1)
23         printf("%d\n",info1.u.num);
24     if(info2.b==2)
25         printf("%c\n",info2.u.ch);
26     if(info3.b==3)
27         printf("%f\n",info3.u.d);
28     return 0;
29 }

二、结构体数组存储表达式数组,数组元素可以类型判断

 1 #include <stdio.h>
 2 
 3 /* 表达式结构体 */
 4 typedef struct {    
 5     short b;//判断类型
 6     union {
 7         int num;
 8         char ch;
 9     }u;        
10 }EXPRESSION;
11 
12 /* 判断是否是数字 */
13 int isdigit(char ch){
14     return ch>='0'&&ch<='9';
15 }
16 
17 int main()
18 {    
19     /* 表达式字符串 */
20     char s[] = "150+(2*3)-5";
21     /* 表达式结构体数组 */
22     EXPRESSION expression[20];
23     /* 记录表达式 */
24     static unsigned short count;
25     /* 计算数字sum */
26     int sum = 0;
27     /* 字符串转表达式结构体数组 */
28     for(int i=0; s[i]; ++i)
29     {
30         /* 1.数字累加 */
31         if(isdigit(s[i])&&s[i+1]){    
32             sum = sum*10 + s[i]-'0';
33             expression[count].b = 1;        
34             continue;                    
35         }
36         expression[count++].u.num = sum;
37         sum = 0;    
38         /* 2.非数字 */
39         expression[count].b=2;
40         expression[count++].u.ch = s[i];            
41     }
42     /* 表达式结构体数组打印 */
43     for(int j=0; j<count; ++j)
44     {
45         if(expression[j].b==1){//数组元素的数据类型判断
46             printf("%d",expression[j].u.num);
47         }
48         else if(expression[j].b==2){
49             printf("%c",expression[j].u.ch);
50         }        
51     }    
52     return 0;
53 }