当我知道每个元素的大小时,如何从void指针到数组获取一个项目?

时间:2013-01-02 09:37:13

标签: c void-pointers

当我想为教育目的编写自己的快速入口时。这就是我得到的:

qsort(void* array, int count, int size, int(*compare)(const void*, const void*));

我有数组中每个元素的大小,以及指向数组中第一个元素的指针。如何获取该数组中的每个元素?

3 个答案:

答案 0 :(得分:5)

如果使用sizeof运算符生成大小,则它是sizeof(char)的倍数(根据定义为1)。因此,将void*投射到char*,并一次移动size个字符。

(((char*)array) + i*size)

答案 1 :(得分:4)

您通常会使用char *指针进行地址算术,例如访问i的元素array

char * array_ptr = (char *)array + i * size;

答案 2 :(得分:4)

很简单,将其强制转换为char*并执行指针运算:

char *carray = (char*)array;
char *pointer_to_n = carray + n * size;
BTW,一些编译器(如GCC)有一个扩展,允许对void指针进行指针算法,就好像它们是指向char的指针一样,但这是不可移植的。