2

我正在写一些学校项目,我需要交换两项 void* 指针数组。我可以用下面的代码来做到这一点:

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);
}

但是我需要在没有 memcpy 的情况下交换项目,只需要使用 malloc、realloc 和 free。这甚至可能吗?

谢谢

4

2 回答 2

2

为什么不以这种方式交换?:

void swap(void *v[], int i, int j)
{
    void *temp;

    temp = v[i];
    v[i] = v[j];
    v[j] = temp;
}

正如 qsort 所做的那样(交换数组中的元素):

void sort(void *v[], int left, int right, int (*comp)(const void *, const void *))
{
    int i, last;

    if (left >= right) return;
    swap(v, left, (left + right) / 2);
    last = left;
    for (i = left + 1; i <= right; i++) {
        if ((*comp)(v[i], v[left]) < 0)
            swap(v, ++last, i);
    }
    swap(v, left, last);
    sort(v, left, last - 1, comp);
    sort(v, last + 1, right, comp);
}
于 2013-05-14T12:29:54.033 回答
-1

数组内容可以就地交换,仅使用 achar作为临时变量。

void swap(void *base, int len, int width)
{
  int i;
  char t;

  for (i = 0; i < width; i++)
  {
    t = base[i];
    base[i] = base[i + width];
    base[i + width] = t;
  }
}
于 2013-05-14T12:39:36.603 回答