deviation
函数会抛出以下错误:"Array subscript is not an integer"
。如果你能帮助我找到错误的原因我会很感激。
float average(float data[], int n) {
float total = 0;
float *p = data;
while (p < (data + n)) {
total = total + *p;
p++;
}
return total / n;
}
float deviation(float data[], int n) {
float data_average = average(data, n);
float total;
float *p = data;
while (p < (data + n)) {
total += (data[p] - data_average) * (data[p + 1] - data_average);
}
return total / 2;
}
答案 0 :(得分:3)
p
是指向浮点数的指针。这就是你收到错误的原因。
float *p, total;
...
total += (datos[p]-prom)*(datos[p+1]-prom);
您只能在C中使用ints
作为数组索引。
答案 1 :(得分:1)
数组下标必须是整数,int
类型。您不能将任何其他类型用作数组下标。 p
被声明为float *p
,即指向float
的指针。您不能将指针用作数组索引。
答案 2 :(得分:0)
您可以使用int:
int p = 0;
...
while (p<n) {
// rest is the same
或者,您可以直接使用p
作为指针,我想这就是您想要的。
while(p<datos+n) {
total += (*p-prom)*(*(p+1)-prom);
但请注意,您永远不会增加p
,因此循环永远不会结束。此外,您永远不会初始化total
,因此结果将是随机垃圾值。
答案 3 :(得分:0)
C11dr 6.5.2.1 数组下标 ...“其中一个表达式应具有指向完整对象类型'的类型'',另一个表达式应具有整数类型,结果类型为'' type ''。“ ...
使用[]
,您可以这样做:
// pointer_type[integer_type]
float data[];
int n;
float total;
total = data[n];
// or the unconventional equivalent
// integer_type[pointer_type]
total = n[data]; // But let's leave that for another post
// Instead the OP did
// pointer_type[pointer_type]
// and received error: "Array subscript is not an integer"
float *p;
total = data[p];
使用float
不是问题,而是使用指针。
整数类型包括int
,unsigned
,size_t
,long
等类型。
我认为OP想要以下(或类似的东西)
float deviation(float data[], int n) {
if (i <= 0) return 0;
float data_average = average(data, n);
float total = 0.0; // don't forget to set to 0.0
float *p = data;
while (p < (data + n)) {
total += (*p - data_average) * (*p - data_average);
p++;
}
return sqrt(total / n); // div by 0 averted
}