作为参考,这是我的任务的第二部分:
int* generateFibonacci(int size);
此函数将输入一个称为size的整数作为输入。 size变量中包含的值 将表示Fibonacci序列中有多少数字放入数组中。功能 将使用
calloc
创建此大小的数组,然后使用size
数字填充数组 Fibonacci序列,从1
和1
开始。当数组完成后,函数将返回a 指向它的指针。
当我在第8行“warning: assignment makes and integer from pointer without a cast
”中收到错误时,我遇到了麻烦。
我得到的另一个错误是第19行“warning: return makes pointer from integer without a cast
”。
所以我的问题是,我怎么想设置calloc
来使用一个大小来自用户的数组,然后返回一个指向它的指针?
#include <stdio.h>
#include <stdlib.h>
int* generateFibonacci(int size)
{
int i, array[size];
array[size]=(int*)calloc(size, sizeof(int));
array[0]=0;
array[1]=1;
for(i = 2; i < size+1; i++)
array[i] = array[i-2] + array[i-1];
return *array;
}
void printHistogram (int array[], int size)
{
int i, j;
for(i=0; i <= size; ++i)
{
for(j=0; j < array[i]; j++)
{
printf("*");
}
printf("\n");
}
}
int main(void)
{
int array[100], size;
printf("how big will your Fibionacci number be? ");
scanf("%i", &size);
generateFibonacci(size);
printHistogram(array, size);
return 0;
}
答案 0 :(得分:1)
我想如何设置calloc以使用来自用户的大小来生成数组,然后返回指向它的指针?
对于1D数组int *使用printf()
和scanf()
int *array = {0};
size_t size = 0;
printf("Enter order of array");
scanf("%d", &size);
array = malloc(size);//create memory with space for "size" elements
if(array){//do other stuff}
但是 目前还不清楚您的示例和评论是否真的打算使用2D数组....
如评论中所述,您创建了一个int
数组,然后尝试为其创建内存。
int i, array[size];
...
array[size]=(int*)calloc(size, sizeof(int));//wrong
创建时,array
不需要内存。内存在堆栈上自动创建
如果你想要一个int
的2D数组。然后你可以这样做:
int *array[size]; //create a pointer to int []
有了这个,你可以用这种方式创建一个数组数组(概念上):
for(i=0;i<size;i++) array[i]= calloc(size, sizeof(int));//do not cast the output, not necessary
现在,您基本上拥有size x size
个int
的二维数组。可以通过以下方式为其指定值:
for(i=0;i<size;i++)
for(j=0;j<size;j++)
array[i][j]=i*j;//or some more useful assignment
顺便说一下,根据需要调整calloc()
语句的参数, 但是注意 ,不需要输出其输出。
关于返回语句 ,您的函数原型化为返回int *
。
int* generateFibonacci(int size){...} //requires a return of int *
如果你决定使用一维数组,即int *array={0}
(要求你分配内存),那么返回:
return array;//array is already a `int *`, just return it.
如果您正在使用2D数组,那么要返回int *
,您必须确定要返回的数组的size
个元素:
return array[i];//where `i` can be any index value, from 0 to size-1