c语言bsearch函数怎么返回查找到的值的数组下标
时间: 2024-05-14 15:12:10 浏览: 10
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语言 bsearch()函数示例
bsearch()函数是C语言中的标准库函数,用于在已排序的数组中查找特定元素。以下是一个bsearch()函数示例:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int cmp(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
int main() {
int arr[] = {5, 8, 10, 13, 17, 20};
int n = sizeof(arr) / sizeof(arr[0]);
int key = 13;
int *result = (int*) bsearch(&key, arr, n, sizeof(int), cmp);
if (result != NULL) {
printf("%d is found at position %d.\n", *result, result - arr + 1);
} else {
printf("%d is not found.\n", key);
}
return 0;
}
```
在这个示例中,我们定义了一个整数数组arr,长度为6。我们要在这个数组中查找元素13。我们使用bsearch()函数来查找元素。
首先,我们定义了一个名为cmp的函数,它将用于比较两个元素的值。这个函数将返回一个整数,如果第一个元素小于第二个元素,则返回负数。如果第一个元素等于第二个元素,则返回0。如果第一个元素大于第二个元素,则返回正数。这个函数将在bsearch()函数中使用。
接下来,我们定义了一个名为key的变量,它包含要查找的元素的值。然后,我们调用bsearch()函数来查找元素。在这里,我们传递了四个参数:要查找的元素的地址,数组的地址,数组的长度,元素的大小。最后一个参数是我们刚刚定义的cmp()函数的地址。
如果bsearch()函数找到了元素,它将返回一个指向该元素的指针。否则,它将返回NULL。在这个示例中,我们检查bsearch()函数的返回值是否为NULL。如果不是,则打印查找到的元素和它在数组中的位置。否则,打印未找到元素的消息。
输出结果为:
```
13 is found at position 4.
```
c语言有关数组的函数
C语言中有很多与数组相关的函数,以下是其中一些常用的函数:
1. memset()函数:用于将数组中的元素全部设置为指定的值。
```c
void *memset(void *ptr, int value, size_t num);
```
其中,ptr为指向要填充的内存块的指针,value为要设置的值,num为要设置的字节数。
2. memcpy()函数:用于将一个数组的内容复制到另一个数组中。
```c
void *memcpy(void *dest, const void *src, size_t n);
```
其中,dest为目标数组的指针,src为源数组的指针,n为要复制的字节数。
3. memcmp()函数:用于比较两个数组的内容是否相同。
```c
int memcmp(const void *ptr1, const void *ptr2, size_t num);
```
其中,ptr1和ptr2为要比较的两个数组的指针,num为要比较的字节数。
4. qsort()函数:用于对数组进行快速排序。
```c
void qsort(void *base, size_t num, size_t size, int (*compar)(const void *, const void *));
```
其中,base为要排序的数组的指针,num为数组中元素的个数,size为每个元素的大小,compar为比较函数的指针。
5. bsearch()函数:用于在已排序的数组中查找指定元素。
```c
void *bsearch(const void *key, const void *base, size_t num, size_t size, int (*compar)(const void *, const void *));
```
其中,key为要查找的元素的指针,base为要查找的数组的指针,num为数组中元素的个数,size为每个元素的大小,compar为比较函数的指针。