2013-04-25 2 views
1

Я пытаюсь получить индекс элемента в массиве после того, как lfind и bsearch вернут указатель на найденный элемент. У меня это до сих пор:Определение индекса из bsearch и lfind?

(char *) (found - cv->baseAddress); 

где найденный адрес, что нашел функции, а базовый адрес является адресом элемента 0. Однако, компилятор дает мне эту ошибку:

cvector. c: 150: 28: предупреждение: указатель типа 'void *', используемый для вычитания cvector.c: 150: 4: предупреждение: возврат делает целое число от указателя без литья

Что мне делать?

ответ

2

Вы должны придать возвращаемому указателю верный тип. Затем вам нужно разделить смещение, которое вы получаете, с размером объектов в массиве, чтобы получить индекс.

+0

Так будет выглядеть примерно так: * (int *) (char *) found - cv-> baseAddress/elemSize? @Joachim Pileborg – girlrockingguna

+0

Не могу сказать без вас, показывая нам вызов bsearch() (и тип вашего массива элементов). – Medinoc

+2

@girlrockingguna Практически вам нужны дополнительные скобки, иначе деление будет неправильным: '((typeOfentries *) found - cv-> baseAddress)/sizeof (typeOfEntries)'. –