为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
慕森卡 2019-11-23 11:22:00
我想将混合数据类型存储在数组中。怎么可以这样呢?
查看完整描述

3 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

使用联合:


union {

    int ival;

    float fval;

    void *pval;

} array[10];

但是,您将必须跟踪每个元素的类型。


查看完整回答
反对 回复 2019-11-23
?
偶然的你

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。


查看完整回答
反对 回复 2019-11-23
  • 3 回答
  • 0 关注
  • 959 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信