Имеется такой код
#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);