我有一个任务:
我需要交换数组中的元素,通过"void指针为基础">交换功能。这是一个简单的冒泡排序算法。
但是我的void SwapInt(void *x, void *y)
函数不工作!我的意思是它调用正确,但什么也没做。我的预排序数组没有改变。这里可能有什么问题,如何解决?
void SwapInt(void *x, void *y)
{
void *buffer = x;
x = y;
y = buffer;
}
bool CmpInt(void *x, void *y)
{
int *intPtrX = static_cast<int*>(x);
int *intPtrY = static_cast<int*>(y);
if(*intPtrX > *intPtrY)
return true;
else
return false;
}
void Sort(int array[], int nTotal, size_t size, void (*ptrSwapInt)(void *x, void *y), bool (*ptrCmpInt)(void *x, void *y))
{
for (int i = 0; i < nTotal; i++)
{
for (int j = 0; j < nTotal - 1; j++)
{
if (ptrCmpInt(&array[j] , &array[j + 1]))
{
ptrSwapInt(&array[j], &array[j + 1]);
}
}
}
}
p。S我已经访问了StackOverflow_1和StackOverflow_2,我仍然没有线索,什么是错的。
你不能通过交换指针来交换整数,你必须解引用的指针。要做到这一点,你必须将它们转换为int指针
void SwapInt(void *x, void *y)
{
int temp = *static_cast<int*>(x);
*static_cast<int*>(x) = *static_cast<int*>(y);
*static_cast<int*>(y) = temp;
}
事实上,你在CmpInt
函数中完全正确地做到了这一点,所以我不确定SwapInt
中的问题是什么。