我正在写一些学校项目,我需要交换两个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。这甚至可能吗?
谢谢
答案 0 :(得分: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);
}
答案 1 :(得分:-1)
只使用char
作为临时变量,就可以交换数组内容。
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;
}
}