如何将混合数据类型(int,float,char等)存储在数组中?

我想将混合数据类型存储在数组中。怎么可以这样呢?



慕森卡
浏览 960回答 3
3回答

尚方宝剑之说

使用联合:union {    int ival;    float fval;    void *pval;} array[10];但是,您将必须跟踪每个元素的类型。

偶然的你

数组元素必须具有相同的大小,这就是为什么它不可能的原因。您可以通过创建变体类型来解决它:#include <stdio.h>#define SIZE 3typedef enum __VarType {&nbsp; V_INT,&nbsp; V_CHAR,&nbsp; V_FLOAT,} VarType;typedef struct __Var {&nbsp; VarType type;&nbsp; union {&nbsp; &nbsp; int i;&nbsp; &nbsp; char c;&nbsp; &nbsp; float f;&nbsp; };} Var;void var_init_int(Var *v, int i) {&nbsp; v->type = V_INT;&nbsp; v->i = i;}void var_init_char(Var *v, char c) {&nbsp; v->type = V_CHAR;&nbsp; v->c = c;}void var_init_float(Var *v, float f) {&nbsp; v->type = V_FLOAT;&nbsp; v->f = f;}int main(int argc, char **argv) {&nbsp; Var v[SIZE];&nbsp; int i;&nbsp; var_init_int(&v[0], 10);&nbsp; var_init_char(&v[1], 'C');&nbsp; var_init_float(&v[2], 3.14);&nbsp; for( i = 0 ; i < SIZE ; i++ ) {&nbsp; &nbsp; switch( v[i].type ) {&nbsp; &nbsp; &nbsp; case V_INT&nbsp; : printf("INT&nbsp; &nbsp;%d\n", v[i].i); break;&nbsp; &nbsp; &nbsp; case V_CHAR : printf("CHAR&nbsp; %c\n", v[i].c); break;&nbsp; &nbsp; &nbsp; case V_FLOAT: printf("FLOAT %f\n", v[i].f); break;&nbsp; &nbsp; }&nbsp; }&nbsp; return 0;}并集元素的大小是最大元素的大小4。
打开App,查看更多内容
随时随地看视频慕课网APP