Бинарный поиск определенного значения в массиве структур - PullRequest
1 голос
/ 04 июня 2011

Я написал эту функцию, которая использует бинарный поиск для поиска определенного значения в массиве структур. Почему он не компилируется?

Я получаю эту ошибку:

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 ]

2 голосов
/ 04 июня 2011

Ваша проблема в этом утверждении:

pArr->Id[middle]

Похоже, но у меня недостаточно информации, что ваш членский идентификатор - это не указатель или массив, а просто переменная. Таким образом, вы не можете получить к нему доступ с operator[]. Вы должны показать нам, как выглядит этот Field объект.

Полагаю, тебе следует сделать что-то вроде этого

(pArr + middle)->Id, чтобы получить доступ к элементу массива Field, который вы передали в свою функцию. Затем вам нужно передать фактический массив Field структур, чтобы это работало.

1 голос
/ 04 июня 2011

Если вы хотите выполнить поиск в массиве pArr, вам нужно поставить скобки непосредственно за идентификатором. Это должно работать:

pArr[middle].Id
...