当我想为教育目的编写自己的快速排序时,它就来了。这就是我得到的:
qsort(void* array, int count, int size, int(*compare)(const void*, const void*));
我有数组中每个元素的大小,以及指向数组中第一个元素的指针。如何获取该数组中的每个单独元素?
当我想为教育目的编写自己的快速排序时,它就来了。这就是我得到的:
qsort(void* array, int count, int size, int(*compare)(const void*, const void*));
我有数组中每个元素的大小,以及指向数组中第一个元素的指针。如何获取该数组中的每个单独元素?
如果 size 是使用运算符生成的,则它是 of (根据定义为 1)sizeof
的倍数。sizeof(char)
因此,将其void*
转换为char*
,并一次移动size
“字符”。
(((char*)array) + i*size)
您通常会使用char *
指针进行地址运算,例如访问以下元素i
:array
char * array_ptr = (char *)array + i * size;
很简单,将其转换为char*
并进行指针运算:
char *carray = (char*)array;
char *pointer_to_n = carray + n * size;
顺便说一句,一些编译器(例如 GCC)有一个扩展,允许对指针进行指针运算,void
就好像它们是指向 的指针一样char
,但这是不可移植的。