gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:44:57 24 4
gpt4 key购买 nike

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

关于c - 如何迭代指向void的指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55485400/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com