传递递归函数的指针,该函数最初从主转换传递到不同大小的整数指针——c

  • 本文关键字:指针 整数 递归函数 函数 转换 c
  • 更新时间 :
  • 英文 :


我在递归函数中获得指针作为参数,该参数在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));会做的。

最新更新