我在递归函数中获得指针作为参数,该参数在main中使用malloc
分配内存。但是我多次尝试的方式给了我错误最后一个错误是cast to pointer from integer of different
在像。
问题基本上在下面一行,我试图将ptr值转换为指针,希望这将给我指针(所以地址指向*ptr
值)。
11 | populate(arr,--n,(int *)*ptr);
上面的行是在填充递归函数这是我的代码
#include <stdio.h>
#include <malloc.h>
void populate(int *arr,int n,int *ptr)
{
if(n==0)
return;
--n;
*ptr=*ptr+n;
*ptr=(int)arr[n-1];
populate(arr,--n,&*ptr);
}
int main() {
int arr[]={1,2,3,4,5};
int *ptr=(int *) malloc(sizeof (int)*5);
populate(arr,5,ptr);
printf("%dn",*ptr);
printf("%dn",*ptr+1);
return 0;
}
我要做的就是分配5int
大小的内存并将其分配给ptr
,现在populate
递归函数的要点是,我可以将arr
数组中的元素值分配给ptr
,因此ptr可以用于评估arr
数组中也存在的相同数值,因此在主要情况下,我可以执行ptr+1
,应该打印2等等
任何帮助都会很感激,谢谢
ptr
可用于评估arr
中也存在的相同数值
如果你想通过ptr
访问arr
中的元素,ptr
的类型应该是int**
,它是一个int型指针数组,而不是int*
,它是一个int型指针数组。
populate(arr,--n,(int *)*ptr);
编译器给出的错误是必需的。由于L11上的ptr
最初是int*
,因此应用解引用操作符*将返回int
。由于不能保证int型的大小等于void*
,因此将int型转换为int*
将导致错误。
如果你只是想复制一个数组,一个普通的memcpy()
甚至普通的for
循环就可以了。不需要写递归函数。正如@4386427上面所说的,memcpy(ptr, arr, sizeof(arr));
会做的。