我的分区函数出现错误:
assignment makes integer from pointer without a cast
v= array[low];
comparison between pointer and integer [-Werror]
这是我在整个分区功能中遇到的错误。请帮忙。
void quickSort(void *array[], int low, int high)
{
int p;
if(low < high)
{
p= partition(*array, low, high);
quickSort(array, low, p-1);
quickSort(array, p+1, high);
}
}
int partition(void *array[], int low, int high)
{
int v, i, j, temp;
v= array[low];
i=low;
j=high+1;
do
{
do
i++;
while(array[i]<v && i <=high);
do
j--;
while(v<array[j]);
if(i<j)
{
temp =array[i];
array[i] = array[j];
array[j] = temp;
}
}while(i<j);
array[low] = array[high];
array[high] = v;
return(j);
}
答案 0 :(得分:1)
array
是一个指针数组,因此array[low]
是一个指针;你无法将它与v
中的整数进行有意义的比较。您需要取消引用指针才能获取值。要以int
方式访问它们,您需要转换指针类型。
v = *(int*)array[low];
array
的所有其他用法需要进行类似修改,例如
while (*(int*)array[i] < v && i <= high)
答案 1 :(得分:0)
赋值使用指针生成整数而不使用强制转换
来自这一行v= array[low];
这是因为array
是一个void
指针数组(即array[low]
也是void
指针),v是int
。所以看看你正在做的类型
int = void*
因为错误说 - 你有一个指针(void指针)并从指针生成一个int。这是非法的。
指针和整数之间的比较[-Werror]
来自以下几行:
while(array[i]<v && i <=high);
....
while(v<array[j]);
原因与上面描述的相同 - 你将int类型与指针类型混合。
我不确定你应该做些什么来解决,但也许数组应该被转换为int
并取消引用。像
v= array[low]; ----> v= *((int*)array[low]);
|^^^^^^^^^^^^^^|
cast void* to get an int*
|-----------------|
Dereference the int* to get an int
两个while
语句类似。
那就是说,我看到代码中的其他东西对我来说很奇怪。
例如:
array[high] = v;
我不确定你在这里尝试了什么,但又有类型不匹配。