c中的赋值和比较指针

时间:2017-10-31 20:50:43

标签: c pointers function-pointers void void-pointers

我的分区函数出现错误:

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

2 个答案:

答案 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;

我不确定你在这里尝试了什么,但又有类型不匹配。