我需要写一个函数
void reverse(void *base, int nel, int width)
{
// ...
}
其中base是指向数组开头的指针,nel - 数组中元素的数量,width是每个元素的大小(以字节为单位)。
例如,我如何交换数组的前两个元素?
答案 0 :(得分:2)
在memcpy
值的帮助下,您可以简单地使用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);
}
}
答案 1 :(得分:2)
如果您想要输入通用类型,请使用
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);
}
这将交换前两个元素。