Может кто-нибудь объяснить мне cmpfunc
, который используется в функции qsort
? Что такое a
и b
в этой функции и на что они указывают?
int cmpfunc(const void *a, const void *b)
{
return(*(int*)a - *(int*)b);
}
Может кто-нибудь объяснить мне cmpfunc
, который используется в функции qsort
? Что такое a
и b
в этой функции и на что они указывают?
int cmpfunc(const void *a, const void *b)
{
return(*(int*)a - *(int*)b);
}
a
и b
в cmpfunc
являются указателями на тип const void
. cmpfunc
может принимать указатель на элементы массива любого типа данных.void *
указатель не может быть разыменован, поэтому перед разыменованием необходимо выполнить приведение int *
.
В этом случае входными данными являются *void, и вам нужно comaper целые числа в вашем случае. Поэтому вам нужно будет преобразовать типы. Вот почему есть
*(int *) a
это может быть плавающий тип
*(float *) a
и так далее типа...
вы можете найти эту реализацию:
int cmpfunc(const void *a, const void *b)
{
if(*(int *)a < *(int *)b) return -1;
if(*(int *)a == *(int *)b) return 0;
if(*(int *)a > *(int *)b) return 1;
}
void *
, а не *void
, не так ли?
- person alk; 02.01.2016
void *
— это тип указателя void
, тип указателя на void
, чем *void
не является. На самом деле последнее недействительно C.
- person alk; 02.01.2016
a
иb
— указатели на элементы массива. - person ameyCU   schedule 02.01.2016