【发布时间】:2017-06-17 06:21:16
【问题描述】:
假设我在 3 个不同的结构中有 3 种不同类型的数据集:
typedef struct
{
int a;
//...
}DATATYPE1;
typedef struct
{
int a;
//...
}DATATYPE2;
typedef struct
{
int a;
//...
}DATATYPE3;
然后想象一下,我希望将其中一种类型的数据分配给这样的主结构:
typedef struct
{
int b;
void* data;
//...
}OBJECT;
假设我声明 OBJECT* abc = malloc(sizeof(OBJECT)); 和 DATATYPE1* dt1 = malloc(sizeof(DATATYPE1));
有没有办法可以在代码中输入如下内容:
abc->data = dt1;
然后调用:
(abc->data)->a;
不将abc->data 指针解引用回e.g. DATATYPE1* dp = abc->data,然后使用dp->a;
【问题讨论】:
-
1) 除了宏或枚举常量之外,不要使用全大写的名称。 2) 不要在没有真正需要的情况下使用
void *。编写类型安全的代码! 3) 编译器应该如何知道您的void *指向的类型而不需要强制转换? 4) 您尝试解决的实际问题是什么? -
这就是我不知道的重点。但是有什么方法可以在附近工作吗?
-
可以吗?也许(如果你能明确第 4 点)。实际的问题是:你应该吗?哪个更容易回答:NO!
-
我想尝试看看是否可能的一点是,我是否可以通过 void 指针使用结构字段而不使用
DATATYPE1* dt1 = malloc(sizeof(DATATYPE1)); -
请读一本C书!这与动态内存分配无关。没有冒犯,但是您要么有一些基本的误解,要么您无法正确解释问题。两者都是编写适当程序的必要先决条件。
标签: c pointers struct void-pointers