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 */
}