2

当我想为教育目的编写自己的快速排序时,它就来了。这就是我得到的:

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

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

4

3 回答 3

6

如果 size 是使用运算符生成的,则它是 of (根据定义为 1)sizeof的倍数。sizeof(char)因此,将其void*转换为char*,并一次移动size“字符”。

(((char*)array) + i*size)
于 2013-01-02T09:40:21.907 回答
4

您通常会使用char *指针进行地址运算,例如访问以下元素iarray

char * array_ptr = (char *)array + i * size;
于 2013-01-02T09:40:09.503 回答
4

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

char *carray = (char*)array;
char *pointer_to_n = carray + n * size;

顺便说一句,一些编译器(例如 GCC)有一个扩展,允许对指针进行指针运算,void就好像它们是指向 的指针一样char,但这是不可移植的。

于 2013-01-02T09:41:06.277 回答