C语言中的泛型数组包含

C语言中的泛型数组包含,c,C,我有一个小函数来查找数组中的数字: bool val_in_array(int val, int array[], size_t size) { for (int i=0; i<size; i++) if (val == array[i]) return true; return false; } bool val\u在数组中(int val,int array[],size\u t size) { 对于(int i=0;i嘿,这是

我有一个小函数来查找数组中的数字:

bool val_in_array(int val, int array[], size_t size)
{
    for (int i=0; i<size; i++)
        if (val == array[i])
            return true;
    return false;
}
bool val\u在数组中(int val,int array[],size\u t size)
{

对于(int i=0;i嘿,这是一个很好的问题。让我们以标准库为例:

void *bsearch(const void *needle, const void *array,
                     size_t nmemb, size_t size,
                     int (*compar)(const void *, const void *));
这是一个令人印象深刻的标题。但是我们可以在数组中声明
val\u
,如下所示:

void *val_in_array(const void *needle, const void *array,
                     size_t nmemb, size_t size,
                     int (*compar)(const void *, const void *));
我们将通过返回一个指向该对象的指针来简化我们的生活

关于实施:

{
    const char *ptr = array;
    for (int i=0; i<nmemb; i++, ptr += size)
        if (!compar(needle, ptr)
            return ptr;
    return NULL;
}
如果指针不为null,请将其转换回正确的指针类型,并从中减去原始数组以获得元素的索引

    int *found = val_in_array(...);
    if (found) {
        int index = found - int_array;
        /* ... */
    } else {
        /* not found */
    }

<代码> BSCAD/<代码>本质上是相同的函数,但对于排序的数组来说,它更快,因为它利用了被排序的数组。

可以用C++编写。泛型编程不是C的一部分,尽管人们有时会尝试许多黑客。@是的,这就是计划……终于!现在我不知道C++了。+
    int *found = val_in_array(...);
    if (found) {
        int index = found - int_array;
        /* ... */
    } else {
        /* not found */
    }