gpt4 book ai didi

c - 从 C 中的用户定义函数返回指针

转载 作者:太空宇宙 更新时间:2023-11-03 23:20:11 24 4
gpt4 key购买 nike

我正在完成一项帮助我理解指针使用的作业。我觉得我掌握得很好,除了从函数返回指针的时候。这是我遇到问题的代码:

#include <stdlib.h>
#include <stdio.h>
//#include <time.h>

double *ptr;
double * userallocate(double numbers)
{
if (numbers < 1000000)
{
ptr = malloc(sizeof(double)*numbers);
return ptr;
}
else
{
printf("You have allocated too many numbers... SHAME\n");
exit(0);
}
}

double * gendata(double *ptr, double numbers)
{
int i;
for (i=0;i<numbers;i++)
ptr[i] = rand()/RAND_MAX;
return ptr;
}

void average(double numbers)
{
int i;
double sum, average;
for (i=0;i<numbers;i++)
sum+=ptr[i];
average = sum/numbers;
printf("%f,",sum);
printf("We have averaged %d random numbers for you.\n The average is %f",(int) numbers,average);
}
int main(int argc, char *argv[])
{
double num;
if (argc !=2)
{
printf("Not enough arguements... SHAME\n");
exit(0);
}

num = atof(argv[1]);

userallocate(num);
gendata(ptr,num);
average(num);
getchar();
return 0;
}

第一个函数 userallocate() 旨在创建一个包含 double 空间的缓冲区,其大小由命令行参数确定。我的代码可以编译,但是当我尝试将随机数放入缓冲区并对它们进行平均时,我得到了 0.0000。我认为我在 userallocate() 中返回指针并将其传递给其他函数的方式存在问题。任何帮助将不胜感激!

最佳答案

您看到 0.0000 的原因与指针无关。

rand() 返回一个 int,而 RAND_MAX,也是一个 int,很可能会更大比 rand() 返回的值大,所以大多数时候整数除法的结果是 0。

如果您想要浮点结果,您需要将除法的参数之一设为浮点类型。

        ptr[i] = rand()/(double)RAND_MAX;

关于c - 从 C 中的用户定义函数返回指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41879841/

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