我正在写一个计算股价移动平均值(MA)的C程序。数据在数组datavalue[count]中可用,count=是数据值的数目。现在我想给妈妈写一个函数。。但我必须在函数中传递三个参数,如下所示
int count=数据值的数目
int K=移动平均周期
array float type datavalue=包含股票定价的数组。
我编写了以下代码(作为计算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;
}
但是当从主文件调用时,上面的代码不起作用。
编译时显示错误
下标值既不是数组也不是指针也不是向量
以下几行:
sum = sum + datavalue[i];
sum = sum + datavalue[i] - datavalue[i-k];
最佳答案
变量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];
}