0

我需要写一个函数

void reverse(void *base, int nel, int width) 
{ 
    // ... 
}

其中 base 是指向数组开头的指针, nel - 数组中元素的数量, width 是每个元素的大小(以字节为单位)。

例如,如何交换数组的前两个元素?

4

2 回答 2

2

您可以在 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);
    }
}
于 2012-10-10T14:31:53.107 回答
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);
}

这将交换前 2 个元素。

于 2012-10-10T14:32:40.813 回答