我需要写一个函数
void reverse(void *base, int nel, int width)
{
// ...
}
其中 base 是指向数组开头的指针, nel - 数组中元素的数量, width 是每个元素的大小(以字节为单位)。
例如,如何交换数组的前两个元素?
您可以在 valuememcpy
的帮助下简单地使用(因为它是许多编译器的内置函数) width
。您还需要一个临时变量。
/* C99 (use `malloc` rather than VLAs in C89) */
#include <string.h>
void reverse(void *base, size_t nel, size_t width)
{
if (nel >= 2) {
char *el1 = base;
char *el2 = (char *)base + width;
char tmp[width];
memcpy(tmp, el1, width);
memcpy(el1, el2, width);
memcpy(el2, tmp, width);
}
}
如果您希望它键入通用,请使用
void swap(void *base, int len, int width)
{
void *p = malloc(width);
memcpy(p,base,width);
memcpy(base,(char*)base+width,width);
memcpy((char*)base+width,p,width);
free(p);
}
这将交换前 2 个元素。