C 从指针数组初始化和访问指针
假设我有以下几点:C 从指针数组初始化和访问指针,c,pointers,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
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”函数的第一行进行类型转换,以确保正确的指针算法,但收到警告“初始化来自不兼容的指针类型”。有必要打字吗 初始化应该以这种方式工作,只要记住在使用完内存后再次
释放()
要获取特定元素的地址,可以使用普通数组索引访问和运算符的地址&
:
void **GetPtr(void **ptrElems, int index)
{
void **elem = &ptrElems[index];
return elem;
}
您还可以在分配内存后对其调用memset或bzero,这将产生相同的结果,但是如果malloc失败,您必须在将内存归零之前测试返回值
sth的答案将适用于下一部分,但也适用于:
void **GetPtr(void **ptrElems, int index)
{
return ptrElems + index;
}
当您向指针添加一个整数时,C假定您希望该整数类似于数组索引,并将其指向的任何值的sizeof乘以该整数。这就是为什么您可以使用++或--a指针并获取指向下一个或上一个元素的指针。或者,返回ptrElemns+index代码>,这是完全等效的。不过,&ptrElems[index]
版本可能看起来更好。malloc是初始化“void**”以指向指针数组的最佳方法吗?calloc
接受两个值并为您执行乘法
void **GetPtr(void **ptrElems, int index)
{
return ptrElems + index;
}