首页 > 解决方案 > 数组作为函数中的参数

问题描述

我正在编写一个 C 程序来计算股价的移动平均线 (MA)。数据在数组 datavalue[count] 中可用,count= 是数据值的数量。现在我正在尝试为 MA 编写一个函数。但我必须在函数中传递三个参数,如下所示

我编写了以下代码(作为计算 MA 的完整代码的一部分)。它工作正常。

float data[count], mag[count];
double avg, sum;

for (i=0; i<=count; i++)
   data[i] = numberArray[i];

for (i=0; i<k-1; i++) {
     mag[i-1] = 0;
     sum = sum + data[i];
}

for (i=k-1; i<=count; i++) {
    mag[i-1] = avg;
    sum = sum + data[i] - data[i-k];
    avg = sum / k;
}

上面的代码在单个主文件中运行良好。但是由于我必须在我的程序中一次又一次地重用 MA,因此我决定为 MA 创建一个单独的函数。我做了如下

float *mavg(int count, int k, float datavalue)
{
    float *mag = malloc(sizeof(float)*count);
    //float data[count];
    float avg=0, sum=0;
    int i;

    for (i=0; i<=count; i++) {
        for (i=0; i<k-1; i++) {
            mag[i-1] = 0;
            sum = sum + datavalue[i];
        }
    }

    for (i=k-1; i<=count; i++) {
        mag[i-1] = avg;
        sum = sum + datavalue[i] - datavalue[i-k];
        avg = sum/k;
    }
    return mag;
}

但是从主文件调用时,上面的代码不起作用。编译时显示错误

下标值既不是数组也不是指针也不是向量

在以下几行中:

标签: carraysfunction

解决方案


变量datavalue不是数组。它在这里定义为单个浮点数:

float *mavg(int count, int k, float datavalue)
                              ^^^^^
                              That is not an array

因此,您在执行时会遇到编译器错误datavalue[i]

你是不是打算做

float *mavg(int count, int k, float* datavalue)
                                  ^

这部分看起来也很奇怪:

for(i=0;i<=count;i++)     // Here you use variable i for the loop
    for(i=0;i<k-1;i++)    // and again here you use variable i for the loop
                          // Sure that is what you want?
    {
        mag[i-1]=0;       // When variable i is zero, you index with -1 which is wrong
                          // as you write outside the allocated memory

        sum=sum+datavalue[i];
    }

推荐阅读