二进制搜索结构数组中的特定值

时间:2011-06-04 09:05:17

标签: struct binary-search

我写了这个函数,它使用二进制搜索来查找结构数组中的特定值。为什么不编译?

我收到了这个错误:

prog.c:224: error: subscripted value is neither array nor pointer
prog.c:226: error: subscripted value is neither array nor pointer

这是功能:

int FieldSearch(Field *pArr, int size, int val)
{
    int low=0,high=size-1, middle;
    while (low <= high)
    {
        middle = (low + high)/2;
        if (val == pArr->Id[middle])
            return middle;
        else if (val < pArr->Id[middle])
            high = middle -1;
        else
            low = middle +1;
    }
    return NOT_FOUND;
}

这是字段结构:

typedef struct field
{
        char Id;
        Coordinates location;
        int area;
        int price;
} Field;

也许原型是错的......

2 个答案:

答案 0 :(得分:2)

你的问题是这句话:

pArr->Id[middle]

看起来像,但我没有足够的信息,你的成员Id不是指针或数组,而只是一个变量。因此,您无法使用operator[]访问它。您应该向我们展示这个Field对象的样子。

我猜你应该做这样的事情

(pArr + middle)->Id所以这将访问传递给函数的Field数组的元素。然后你必须传入一个Field结构的实际数组,以便工作。

答案 1 :(得分:1)

如果要搜索“数组”pArr,则需要将括号直接放在标识符后面。这应该有效:

pArr[middle].Id