【发布时间】:2014-12-07 14:56:24
【问题描述】:
我想创建一个 void* 1d 数组,每个单元格中的每个指针都指向我编写的结构(它必须是 void* 数组,由于某些原因不是 sturct 数组†),所以到目前为止我写了这个:
typedef struct
{
int weight;
int amount;
} Banana;
void* makeBanana(){
Banana new;
new.weight = 1;
new.amount = 6;
void* p = &new; //its Legal??
return p;
现在,在那之后,我想将此 p 存储在 void* 指针的动态数组中,每个 void* 指针都指向另一个 Banana,我这样写:
void* ptrToBananaArray = (void*)malloc(3); //3 is just example of lenght
ptr[0] = makeBanana();
这样好吗?如果没有,正确的方法是什么?
† 使用void* 而不是Banana* 的原因:
这是因为我有一个通用代码 elswhere 只能得到 void* 类型,所以这里是香蕉,但将来它还想得到一个番茄或洋葱或其他东西,所以它必须是 void*
【问题讨论】:
-
NG。
void* p = &new;return p;:p指向局部变量。在外部范围内无效。 -
makeBanana() 应该返回一个指向没有意义的 void 的指针。
-
如果你使用
void*,你的代码会更难写和读。您指定了“由于某些原因而不是 sturct 数组” - 这些原因是什么?您应该描述它们,以便我们了解它们是否比干净的代码更重要。 -
@anatolyg 是因为我有一个通用代码 elswhere 只能获得 void* 类型,所以这里是香蕉,但将来它还想获得番茄或洋葱或其他东西,所以它必须无效*