当我想为教育目的编写自己的快速入口时。这就是我得到的:
qsort(void* array, int count, int size, int(*compare)(const void*, const void*));
我有数组中每个元素的大小,以及指向数组中第一个元素的指针。如何获取该数组中的每个元素?
答案 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
的指针一样,但这是不可移植的。