int compare (const void * a, const void * b)
{
return (*(int*)a - *(int*)b);
}
Я не понимаю выражение *(int*)a
?Что означает выражение * (int *)?
int compare (const void * a, const void * b)
{
return (*(int*)a - *(int*)b);
}
Я не понимаю выражение *(int*)a
?Что означает выражение * (int *)?
void *
указатель общий указатель, это может указывать на что-либо, но как компилятор не знает точно, что это указывает на вы должны сообщить компилятору, что именно он, указывая на. Это «рассказ» - это то, что делает актер: (int *) a
сообщает компилятору, что a
фактически указывает на int
.
Затем код просто использует оператор разыменования (унарный *
), чтобы получить значение, где a
указывает и использует это в выражении нормального вычитания.
(int*)a
бросает a
в int*
. Просто разыменование a
не работает, потому что *a
будет иметь тип void
, что недопустимо.
Кроме того, здесь несколько небезопасно, так как a
передается как const
, и вызывающий абонент ожидает *a
не подлежит изменению. OK, a
не изменилось, но такое явное преобразование должно быть редкостью.
Дополнительные разыменование «получает» значение a
указывает на. В конце концов, compare
возвращает 0
, если оба данных равны.
(int*)a
конвертирует указатель void в указатель типа int. *(int*)a
принимает значение, на которое указывает указатель.
«принимает значение этого указателя», __no__, он _dereferences_, этот указатель, то есть принимает значение, которое указатель _ указывает на_. «Значение [the] pointer» будет адресом памяти, который он хранит. Btw вы помещаете звездочку в неправильное место, это '(int *) a' not' (int) a * ', последняя не компилируется, и если она делает это, то делает не то. – emlai
Извините ... Я имел в виду это. :) И спасибо за исправление меня. – Mukit09
Это C или C++? Ответ для каждого языка будет отличаться. – emlai
Я изучаю программирование на С ++ –
Все ответы, которые вы получили до сих пор, являются ответами C. (Хотя применимо и на C++, так как из-за наследования C++ из C, но не считается хорошей практикой в современном C++.) – emlai