如何迭代指向void的指针数组

How to iterate on array of pointers to void

我想做一个能够移动数组元素的函数,但数组可以是整数或我定义的结构。如何迭代指向 void 数组的指针?

到目前为止,这是我使用 Ints 的示例代码,但我计划对其他数据类型使用相同的函数:

void shift(const void *source, int pos, int lenght){

    memmove(&source[pos], &source[pos+1], sizeof(int)*(lenght-pos-1) );
}

int main(int argc, char *argv[]) {
    int a[10] = {1,2,3,4,5,6};
    shift(a, 3, 10);

}

要跨任意数据类型进行这项工作,您需要做的就是同时传递数据的大小。这将使您计算偏移量。例如,

void shift(void *source, size_t size, int pos, int length){
    int src_offset =  pos * size;
    int dst_offset = (pos + 1) * size;
    memmove(source + src_offset, source + dst_offset, size*(length-pos-1) );
}

现在您可以像这样使用不同的数据类型

int main(int argc, char *argv[]) {
    // ints
    int a[10] = {1,2,3,4,5,6};
    shift(a, sizeof(int), 3, 10);

     // chars
    char b[10] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'};
    shift(b, sizeof(char), 3, 10);

     //etc...
}