【问题标题】:C - How create an array that points to different datatypes?C - 如何创建指向不同数据类型的数组?
【发布时间】:2018-12-06 10:21:10
【问题描述】:

我想创建一个数组,在它的第零个索引处有一个双精度值,一个指向双精度数组的指针,以及一个指向整数数组的指针。这可能吗?还是应该使用结构?

类似这样的: pointer description

【问题讨论】:

  • 使用指向union 的指针,包含所有这些类型。或void*...
  • 请告诉我们有关此数组的矿石。索引 1、2、3 等应该包含什么?您链接的图片非常不清楚。
  • 听起来你真的想要一个结构,而不是一个“数组”。您需要解决的真正问题是什么?你为什么想要一个“数组”?你应该用它做什么?

标签: c pointers void-pointers


【解决方案1】:

可以这样做,例如使用 void 指针。

但是,不要采用这种方法,因为您需要(根据您所说的)是一个 struct,其中包含一个 double 字段、一个指向 double 数组的指针和一个指向整数数组的指针,如下所示:

struct myStruct {
   double  v;
   double* d_ptr;
   int*    i_ptr;
};

【讨论】:

  • 不,这是错误的方向@Ayatana。请使用 struct.
【解决方案2】:

数组用于存储相同类型的值列表,而结构体用于存储不同类型值的列表。

所以你想要的是struct:

struct data {
    double val0;
    double *dbl_list;
    int *int_list;
};

【讨论】:

    【解决方案3】:

    您可以使用struct 来制作列表数据结构,并且该结构包含union 来保存不同类型的元素,例如:

    typedef struct MY_LIST {
        int utype;
        union {
            int intval;
            double dblval;
        } u;
        struct MY_LIST *next;
    } t_myList;
    

    整数 utype 将保存联合中存储的内容的指示符(例如,值 1 表示整数,值 2 表示双精度数)。

    您现在可以将元素寻址为:

    t_myList *p;
    ...
    if (p->utype==1)
        printf("integer value %d\n", p->u.intval);
    ...
    p= p->next;
    

    【讨论】:

    • 但这已经变成了一个列表。我想要随机访问。
    • 你的图片没有显示。它显示指针。但是,您可以声明这些结构的数组(没有next 元素)。我给了你一些想法;也许是时候用它来制作你想要的东西了。
    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 2022-11-29
    • 2019-05-06
    • 2020-12-20
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 2015-11-30
    相关资源
    最近更新 更多