c语言bsearch函数怎么返回查找到的值的数组下标
时间: 2024-05-14 17:12:10 浏览: 129
C语言的bsearch函数是在有序数组中查找指定元素的函数,其返回值是指向查找到的元素的指针。要获取查找到的值的数组下标,可以进行以下计算:
1. 将返回的指针减去数组的起始地址,得到查找到的元素与数组起始元素之间的偏移量。
2. 将偏移量除以元素的字节数,得到查找到的元素在数组中的下标。
以下是一个示例代码:
```
#include <stdio.h>
#include <stdlib.h>
int compare(const void* a, const void* b) {
return *(int*)a - *(int*)b;
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
int key = 3;
int* p = (int*)bsearch(&key, arr, n, sizeof(int), compare);
if (p != NULL) {
int index = p - arr;
printf("Found %d at index %d\n", *p, index);
} else {
printf("Not found\n");
}
return 0;
}
```
输出结果为:
```
Found 3 at index 2
```
相关问题
c语言求取数组的序号
以下是使用C语言求取数组的序号的方法:
1. 首先,我们需要定义一个比较函数Cmp,用于在排序时比较两个元素的大小。该函数的返回值为int类型,如果p1小于p2,则返回负数,如果p1等于p2,则返回0,如果p1大于p2,则返回正数。
```c
int Cmp(void* p1, void* p2) {
return *(int*)p1 - *(int*)p2;
}
```
2. 接下来,我们需要对数组进行排序,并且需要两个新的数组存放排序后数组和保存排序后数组下标。
```c
int* sortArr = (int*)malloc(sizeof(int) * arrSize);int* ans = (int*)malloc(sizeof(int) * arrSize);
memcpy(sortArr, arr, sizeof(int) * arrSize);
qsort(sortArr, arrSize, sizeof(sortArr[0]), Cmp);
```
3. 最后,我们可以通过遍历原始数组,查找每个元素在排序后数组中的下标,即为该元素的序号。
```c
for (int i = 0; i < arrSize; i++) {
int* p = (int*)bsearch(&arr[i], sortArr, arrSize, sizeof(sortArr[0]), Cmp);
ans[i] = p - sortArr + 1;
}
```
阅读全文