因此,我们已经定义了这些结构:
typedef struct LRU {
int i;
} LRU;
typedef struct WS {
char i;
} WS;
并且在我的主体中,我定义了一个空指针:
void* mStruct = NULL;
根据情况,我需要使用这些结构之一
if(!strcmp(algorithm, "LRU")) {
mStruct = malloc(sizeof(LRU));
mStruct->i = 1;
}
else if(!strcmp(algorithm, "WS")) {
mStruct = malloc(sizeof(LRU));
}
else {
printf("Unknown replacment algorithm %s\n", algorithm);
return -1;
}
... // more code
free(mStruct);
但是这行代码给我一个错误:mStruct->i = 1;
所以,我该如何访问该结构,如果这不是解决我的问题的理想解决方案,您可以建议适当的处理方法吗?
注意,我不想声明指向每个结构的指针(例如LRU *lruPtr;
)
您可以改用工会:
union cache
{
LRU lru;
WS ws;
};
// ...
union cache *myCache = malloc(sizeof *myCache);
if(!strcmp(algorithm, "LRU")) {
myCache->lru.i = 1;
}
您可能会做类似的事情(您需要将mStruct从void*
强制转换为LRU*
):
if(!strcmp(algorithm, "LRU")) {
mStruct = malloc(sizeof(LRU));
((LRU*)mStruct)->i = 1;
}
但是这样的代码闻起来很香,并且使用联合是更好的选择。