3 回答
TA贡献1788条经验 获得超4个赞
使用联合:
union {
int ival;
float fval;
void *pval;
} array[10];
但是,您将必须跟踪每个元素的类型。
TA贡献1841条经验 获得超3个赞
数组元素必须具有相同的大小,这就是为什么它不可能的原因。您可以通过创建变体类型来解决它:
#include <stdio.h>
#define SIZE 3
typedef enum __VarType {
V_INT,
V_CHAR,
V_FLOAT,
} VarType;
typedef struct __Var {
VarType type;
union {
int i;
char c;
float f;
};
} Var;
void var_init_int(Var *v, int i) {
v->type = V_INT;
v->i = i;
}
void var_init_char(Var *v, char c) {
v->type = V_CHAR;
v->c = c;
}
void var_init_float(Var *v, float f) {
v->type = V_FLOAT;
v->f = f;
}
int main(int argc, char **argv) {
Var v[SIZE];
int i;
var_init_int(&v[0], 10);
var_init_char(&v[1], 'C');
var_init_float(&v[2], 3.14);
for( i = 0 ; i < SIZE ; i++ ) {
switch( v[i].type ) {
case V_INT : printf("INT %d\n", v[i].i); break;
case V_CHAR : printf("CHAR %c\n", v[i].c); break;
case V_FLOAT: printf("FLOAT %f\n", v[i].f); break;
}
}
return 0;
}
并集元素的大小是最大元素的大小4。
- 3 回答
- 0 关注
- 959 浏览
添加回答
举报