初始化void指针以指向数组

时间:2010-04-24 17:35:46

标签: c

假设我有以下内容:

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->列表中返回指向存储在给定索引处的元素的指针?

1 个答案:

答案 0 :(得分:1)

在第一点上,如果所有元素的大小都相同,就像itemSize名称所暗示的那样,那么添加一个间接级别(list指向项目的指针,而不是直接指向项目)似乎没有附加值,所以我使用my->list = malloc(count * itemSize);

关于第二点,(char*)my->list + itemSize*index应该有效。当然,您可能首先要检查index < my->count(在这种情况下,您可能希望返回NULL而不是无效指针。)