C - 为什么我的合并功能不起作用?

时间:2017-01-08 20:36:57

标签: c mergesort

我试图为C程序创建一个合并函数,并且编译器一直在抱怨我可以解决的两个问题如何修复它们。

  

首先:数组类型' int * [20]'不可赋值temp =(int *)malloc(20 * sizeof(int));

     

第二:指向整数转换的不兼容指针分配给' int'来自' int *&#39 ;;取消引用* [-Wint-conversion]   一个[开始+ 1] =温度[I];

void merge(int* a, int begin, int middle, int end)
{

    int* temp[20] = {0};
    temp = (int *) malloc ( 20 * sizeof(int));

    int i = begin;        
    int m = middle + 1;

    int k = 0;

    while(i <= middle && m <= end)
    {
        if(a[i] <= a[m])
            temp[k++] = a[i++];
        else
            temp[k++] = a[m++];
    }

    while(i <= middle)
        temp[k++] = a[i++];

    while(m <= end)
        temp[k++] = a[m++];

    for(i = 0; i < k; i++) 
        a[start + i] = temp[i];
    free(temp);
}

任何帮助或指示将非常感激:)

2 个答案:

答案 0 :(得分:-1)

你可以用这个:

int* temp;
temp=malloca(20*sizeof(int));

在此声明之后访问temp指向的元素,您可以使用:例如,我们想要访问元素i

int y= (int)(*(temp+i));// the step i equal to size of integer

你可以参考这个概念并再次写你的代码(最后一个数组是存储数据的内存地址,所以我们可以使用这个数组的起始地址来访问它的不同  元素)

答案 1 :(得分:-2)

如果我理解你的意图正确,你使用指针错了。

int * temp [20]与int ** temp相同;

该行自行创建一个包含20个int指针int *的数组。 如果你试图存储只有20个整数,你就可以使用int temp [20]; 如果你试图存储20个int指针,那么你就可以使用int * temp [20]; 一旦定义了数组的大小,为什么还要再次使用malloc?如果必须调整阵列大小,请使用realloc。要阅读有关realloc的内容,请使用man malloc,它还提供了realloc的说明。

最好的运气。