gpt4 book ai didi

c - 将 calloc 与数组一起使用并返回指针时出现问题

转载 作者:行者123 更新时间:2023-11-30 19:18:21 26 4
gpt4 key购买 nike

作为引用,这是我作业的第二部分:

int* generateFibonacci(int size);

This function will take as input an integer called size. The value contained in the size variable will represent how many numbers in the Fibonacci sequence to put into the array. The function will use calloc to create the array of this size and then fill the array with size numbers from the Fibonacci sequence, starting with 1 and 1. When the array is complete the function will return a pointer to it.

当我在第 8 行收到错误“警告:赋值使得指针中的整数未经强制转换”时,我的麻烦就出现了。我得到的另一个错误是在第 19 行“警告:返回使指针来自整数而不进行强制转换”。

所以我的问题是,我该如何设置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;
}

最佳答案

我该如何设置 calloc 来创建具有用户大小的数组,然后返回指向它的指针?

对于 int 的一维数组 * 使用 printf()scanf()

int *array = {0}; //Note, leaving this initialization method for posterity 
//(See related comments below.)
//however agreeing with commentator that the more idiomatic
//way to initialize would be: int *array = NULL;
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}

但是从你的例子和评论中不清楚你是否真的打算使用二维数组......

正如评论中所述,您创建了一个 int 数组,然后尝试为其创建内存。

int i, array[size];   
...
array[size]=(int*)calloc(size, sizeof(int));//wrong

在创建时,数组不需要内存。内存是自动在堆栈上创建的。
如果您想要一个 int 的二维数组。然后你可以这样做:

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 sizeint 二维数组。可以通过以下方式为其赋值:

for(i=0;i<size;i++)
for(j=0;j<size;j++)
array[i][j]=i*j;//or some more useful assignment

顺便说一下,根据需要调整 calloc() 语句的参数,但请注意,无需强制转换其输出。

关于 return 语句,您的函数原型(prototype)为返回 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

关于c - 将 calloc 与数组一起使用并返回指针时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26894776/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com