void arrayRound(int id, double baln)
{
baln[id] = (baln[id]*100) + 0.5;
int temp = (int) baln[id];
baln[id] = (double) temp;
baln[id] = baln[id] / 100;
}
函数体是给我错误消息的。该函数用于将数组索引舍入到最接近的百分位。我分别将索引变量和数组传递给函数。以下是错误消息:
Fxns.c:70: error: subscripted value is neither array nor pointer
Fxns.c:70: error: subscripted value is neither array nor pointer
Fxns.c:71: error: subscripted value is neither array nor pointer
Fxns.c:72: error: subscripted value is neither array nor pointer
Fxns.c:73: error: subscripted value is neither array nor pointer
Fxns.c:73: error: subscripted value is neither array nor pointer
我的第一个猜测是我需要在参数字段中的baln之后包含空括号,但这并没有帮助。有什么想法吗?
答案 0 :(得分:1)
您正在尝试将baln
类型double
视为数组(使用索引)。这不起作用。
答案 1 :(得分:1)
您的参数应声明为
double *baln
指向double
或double baln[]
的指针,其读取类似于double
的数组,但作为函数参数也表示指针。
void arrayRound(int id, double *baln)
{
baln[id] = (baln[id]*100) + 0.5;
int temp = (int) baln[id];
baln[id] = (double) temp;
baln[id] = baln[id] / 100;
}
会编译,但由于你不知道内存块baln
指向的是什么大小,你可以在这个函数中访问未分配的内存,如果你不小心的话。
答案 2 :(得分:1)
答案 3 :(得分:0)
错误:下标值既不是数组也不是指针
baln[id]
下标价值= baln
运算符[]
,只能在数组或指针上使用。在您的情况下,baln
都不是。它的类型为double
,但不是double[]
或double*
。
int a[] = { 1,2,3,4,5 };
a[0] = 10; // Notice the use of `[]`.This is valid because `a` is an array type.
int b = 10;
int * ptr = &b;
ptr[0] = 99; // Valid because ptr is a pointer type but cause undefined
// behaviour for any other index in this example.
*ptr = 99 ; // This is more readable than the earlier case.