@SABY

Как получить индекс элемента массива с bsearch на Си?

Имеется такой код
#include <stdio.h>
#include <stdlib.h>

int cmp (const int *i, const int *j) {
    return *i - *j;
}

int numeric(int *p1, int *p2)
{
    return(*p1 - *p2);
}

int main(int argc, const char * argv[]) {
    
    int a[] = {3, 2, 1, 0, -100, -32, 31, -31};
    for (int i = 0; i < sizeof(a) / sizeof(int); i++) {
        printf("%d ", a[i]);
    }
    qsort(a, sizeof(a) / sizeof(int), sizeof(int), cmp);
    puts("");
    for (int i = 0; i < sizeof(a) / sizeof(int); i++) {
        printf("%d ", a[i]);
    }
    
    int *p;
    int c = 0;
    p =(char *) bsearch(&c, a, sizeof(a) / sizeof(int), sizeof(int), numeric);

    if (bsearch(&c, a, sizeof(a) / sizeof(int), sizeof(int), numeric)) {
        puts("YES");
    } else {
        puts("NO");
    }
    return 0;
}

Массив после сортировки такой -100 -32 -31 0 1 2 3 31
Затем мне нужно найти какой индекс у элемента со значением 0 в данном массиве
Но проблема в том, что я только получаю указатель и по нему могу только определить входит этот элемент в массив или нет! А мне нужно индекс элемента
Подскажите пожалуйста как это сделать!
Решил
int *p;
    int c = 31;
    p = bsearch(&c, a, sizeof(a) / sizeof(int), sizeof(int), numeric);
    int *pointer;
    pointer = &a[0];
    printf("%d", p -pointer);
  • Вопрос задан
  • 4555 просмотров
Пригласить эксперта
Ответы на вопрос 2
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Вычтите из указателя указатель на начало массива. Будет индекс.
Ответ написан
@SABY Автор вопроса
int *pointer;
    pointer = &a[0];
    printf("%d", &p - &pointer);

Елси так то я получаю 2
-100 -32 -31 0 1 2 3 31
а 0 3ий
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы