这个数组错误是什么意思?

时间:2012-03-06 21:22:53

标签: c arrays

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之后包含空括号,但这并没有帮助。有什么想法吗?

4 个答案:

答案 0 :(得分:1)

您正在尝试将baln类型double视为数组(使用索引)。这不起作用。

答案 1 :(得分:1)

您的参数应声明为

double *baln

指向doubledouble 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)

你做得对;你需要在baln之后在参数列表中包含空括号,如下所示:

void arrayRound(int id, double baln[]);

Here's a full demo.

答案 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.