Поскольку я был смущен, может ли кто-нибудь объяснить мне, что *(int*)a
или *(int*)b
приведен в следующем примере, введите листинг или какое-нибудь сложное объявление указателя? Мне нужно использовать функцию bsearch. ThanksСложное определение в C
int cmpfunc(const void * a, const void * b)
{
return (*(int*)a - *(int*)b);
}
Это Кастинг 'аннулируется *' к 'междунару *' затем разыменования его для доступа к 'int' он указует. Предположительно, известно, что эти аргументы 'void *' указывают на 'int'. – Dmitri
Вы не можете иметь объявление в середине выражения. '(int *)' переводит в указатель-на-int; '*' перед этим разыгрывает указатель. – melpomene
В качестве побочного примечания использование вычитания для проверки того, какая 'int' больше, не является надежной, если вы не можете быть уверены, что вычитание не будет переполняться/переполняться. – Dmitri