假设我有以下内容:
typedef struct {
int itemSize;
int count;
void *list;
} Mystruct;
Mystruct *InitStruct(int itemSize, int count)
{
Mystruct *my = malloc(sizeof(Mystruct));
my->itemSize = itemSize;
my->count = count;
//What is the best way to initialize list? For example:
//my->list = malloc(count * sizeof(void *)); OR
//my->list = malloc(count * sizeof(itemSize));
}
//The following should return a pointer to the element stored at a given index
void *Retrieve(const MyStruct *my, int index)
{
void *item;
//What is the best way to return a pointer to the item at the given index from
//my->list?
}
Mystruct类似于数组,void * list应该存储元素或指向元素的指针。 Mystruct * InitStruct是一个初始化Mystruct指针的函数,void * Retrieve是一个返回指向存储在给定索引处的元素的指针的函数。
首先,我应该如何初始化void * list?它应该包含实际元素还是指向元素的指针数组?
其次,使用void * Retrieve函数,如何在my->列表中返回指向存储在给定索引处的元素的指针?
答案 0 :(得分:1)
在第一点上,如果所有元素的大小都相同,就像itemSize
名称所暗示的那样,那么添加一个间接级别(list
指向项目的指针,而不是直接指向项目)似乎没有附加值,所以我使用my->list = malloc(count * itemSize);
。
关于第二点,(char*)my->list + itemSize*index
应该有效。当然,您可能首先要检查index < my->count
(在这种情况下,您可能希望返回NULL
而不是无效指针。)