可以将数组元素设为一个有区别的并集,即tagged union.
struct {
enum { is_int, is_float, is_char } type;
union {
int ival;
float fval;
char cval;
} val;
} my_array[10];
type
成员用于 for each 数组元素 Select union
中的哪个成员.因此,如果要在第一个元素中存储int
,可以执行以下操作:
my_array[0].type = is_int;
my_array[0].val.ival = 3;
当您想要访问数组的一个元素时,必须首先判断类型,然后使用union的相应成员.switch
句话很有用:
switch (my_array[n].type) {
case is_int:
// Do stuff for integer, using my_array[n].ival
break;
case is_float:
// Do stuff for float, using my_array[n].fval
break;
case is_char:
// Do stuff for char, using my_array[n].cvar
break;
default:
// Report an error, this shouldn't happen
}
由程序员来确保type
成员始终与union
中存储的最后一个值相对应.