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

标签 c pointers malloc

我正在完成一项有助于我理解指针用法的作业。我觉得我已经很好地掌握了,除了从函数返回指针之外。这是我遇到问题的代码:

#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/

相关文章:

c - 动态链接器是 Linux 系统上内核或 GCC 库的一部分吗?

c++ - 为什么迭代对象列表比迭代对象指针列表慢?

c - 如何在C程序中打印指针的地址值?

c++ - 使用 malloc() 和 free() 实现一个简单的分配器类

c - 在一个函数中删除所有二叉搜索树

c - 这种类型的 GUI 是如何制作的?

c - 是否有 sizeof(size_t) > sizeof(off_t) 的 POSIX 实现?

C++指针值改变

c++ - 如果使用 delete 释放使用 malloc() 获得的内存,是否应该产生警告甚至断言失败?

c - 如果在 C 中将分配的内存设置为 NULL 会发生什么