Assignment makes pointer without a cast

拥有回忆 提交于 2019-12-31 07:33:12

问题


I am editing a quick sort code so that the values of low, high, and middle point to an array element instead of integers.

This is my code:

#include <stdio.h>

#define N 10

void quicksort(int a[], int *low, int *high);
int split(int a[], int *low, int *high);

int main(void)
{
    int a[N], i;
    printf("Enter %d numbers to be sorted: ", N);
    for (i=0; i<N; i++)
        scanf("%d", &a[i]);
    quicksort(a, &a[0], &a[N-1]);

    printf("In sorted order: ");
    for (i=0; i<N; i++)
        printf("%d ", a[i]);
    printf("\n");

    return 0;
}

void quicksort(int a[], int *low, int *high)
{
    int *middle;

    if (low >= high) return;
    middle = split(a, low, high);
    quicksort(a, low, middle - 1);
    quicksort(a, middle + 1, high);
}

int split(int a[], int *low, int *high)
{
    int part_element = *low;

    for (;;) {
        while (low < high && part_element <= *high)
            high--;
        if (low >= high) break;
        *low++ = *high;

        while (low < high && *low <= part_element)
            low++;
        if (low >= high) break;
        *high-- = *low;
    }

    *high = part_element;
    return *high;
}

I'm getting the error message:

qs.c:32:12: warning: assignment makes pointer from integer without a cast [enabled by default]
 middle = split(a, low, high);
        ^

Can someone help me with this? Still a beginner at programming. All types of help are appreciated.


回答1:


The problem is in this statement.

middle = split(a, low, high);

because middle is a pointer variable whereas split is a function which returns integer value not a pointer to an integer.

You are assigning integer value to a pointer variable middle . You are not allowed to do that. :)

May be this will help you.




回答2:


Change 'split()' to return an 'int *' instead of 'int'.

Change the last line of the 'split()' function from:

return *high;

to

return high;

Perhaps this would work better:

#include <stdio.h>

#define N 10

void quicksort(int a[], int *low, int *high);
int *split(int a[], int *low, int *high);

int main(void)
{
    int a[N], i;
    printf("Enter %d numbers to be sorted: ", N);
    for (i=0; i<N; i++)
        scanf("%d", &a[i]);
    quicksort(a, &a[0], &a[N-1]);

    printf("In sorted order: ");
    for (i=0; i<N; i++)
        printf("%d ", a[i]);
    printf("\n");

    return 0;
}

void quicksort(int a[], int *low, int *high)
{
    int *middle;

    if (low >= high) return;
    middle = split(a, low, high);
    quicksort(a, low, middle - 1);
    quicksort(a, middle + 1, high);
}

int *split(int a[], int *low, int *high)
{
    int part_element = *low;

    for (;;) {
        while (low < high && part_element <= *high)
            high--;
        if (low >= high) break;
        *low++ = *high;

        while (low < high && *low <= part_element)
            low++;
        if (low >= high) break;
        *high-- = *low;
    }

    *high = part_element;
    return high;
}


来源:https://stackoverflow.com/questions/23509005/assignment-makes-pointer-without-a-cast

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!