我试图为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);
}
任何帮助或指示将非常感激:)
答案 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的说明。
最好的运气。