c - 初始化并访问指针数组中的指针

标签 c pointers

假设我有以下内容:

void **Init(int numElems)
{
   //What is the best way to initialize 'ptrElems' to store an array of void *'s?
   void **ptrElems = malloc(numElems * sizeof(void *));
   return ptrElems;
}

//What is the best way to return a pointer pointing at the index passed as a parameter?
void **GetPtr(void **ptrElems, int index)
{
    void **elem = elems + (index * sizeof(void *)); 
    return elem;
} 

首先,初始化“ptrElems”来存储指针数组的最佳方法是什么?我使用 malloc 是因为将其分配给数组在函数结束后不会持续存在。

其次,指向指定索引处的指针的最佳方式是什么?我尝试对“GetPtr”函数的第一行进行类型转换以确保正确的指针算术,但我收到警告“从不兼容的指针类型进行初始化”。有必要打字吗?

最佳答案

初始化应该以这种方式进行,只需记住在完成后再次free()内存即可。

要获取特定元素的地址,您可以使用普通数组索引访问以及地址运算符&:

void **GetPtr(void **ptrElems, int index)
{
    void **elem = &ptrElems[index];
    return elem;
} 

关于c - 初始化并访问指针数组中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2718594/

相关文章:

C 防止输入超过 30 个字符

C - 自引用结构和重新分配

c - 带数组的后增量指针

c++ - 用于指针生成的递归模板

c - C中的双向链表排序函数

C:当我尝试将其中的很多东西分组时,指向指针问题的指针

c - 解码汇编回调

c - 数组仅用最后一个用户输入的输入字符串填充自身

c - 指向结构体和类型转换的指针

c - 如何运行这个程序?