如何迭代指向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...
}
我想做一个能够移动数组元素的函数,但数组可以是整数或我定义的结构。如何迭代指向 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...
}