[英]How to iterate on array of pointers to void
我想做一个能够移位数组元素的函数,但是数组可以是int或由我定义的struct。 如何迭代指向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...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.