【发布时间】:2016-06-20 22:02:07
【问题描述】:
我的问题:我想创建一个可以交换泛型数组中任意两项的函数。
我有 SwapG 功能,可以交换任意类型的两个项目:
void SwapG(void * a, void * b, size_t size)
{
void * temp = malloc(size);
memcpy(temp, a, size);
memcpy(a, b, size);
memcpy(b, temp, size);
}
这是我尝试在任意类型的数组中交换两个项目的函数:
void SwapInArrayG(void ** arr, int a, int b, size_t size)
{
void * temp = malloc(size);
memcpy(temp, *(arr + a), size);
memcpy(*(arr + a), *(arr + b), size);
memcpy(*(arr + b), temp, size);
}
我很确定我搞砸了指针,但我仍然找不到解决方案。我会很感激任何帮助:)。
【问题讨论】:
-
注意:复制完成后,好
free(temp); -
使用简单宏有什么问题?您的代码是编程错误的邀请,并且会非常缓慢地为每个交换分配/释放内存
-
如果你想交换同一个数组中的两个条目,为什么不使用第一个函数呢?
SwapG(&array[idx1], &array[idx2], sizeof(entry)) -
@EOF 您的代码将交换指针的地址,而不是指针指向的数据。
-
@JoelTrauger:不会。调用会将指向对象的指针传递到
SwapG()-函数,该函数在这些指针上使用memcpy()。
标签: c arrays pointers function-pointers generic-programming