о C ++ литой вопрос - PullRequest
       30

о C ++ литой вопрос

2 голосов
/ 05 августа 2011
#include <stdlib.h>

int int_sorter( const void *first_arg, const void *second_arg )
{
    int first = *(int*)first_arg;
    int second = *(int*)second_arg;
    if ( first < second )
    {
        return -1;
    }
    else if ( first == second )
    {
        return 0;
    }
    else
    {
        return 1;
    }
}

В этом коде, что означает эта строка?

int first = *(int*)first_arg;

Я думаю, что это типизирование. Но с

указатель на int к указатель на int

немного запутался здесь. Спасибо

Ответы [ 5 ]

4 голосов
/ 05 августа 2011

first_arg объявлен как void *, поэтому код преобразуется из void * в int *, затем он отменяет ссылку на указатель, чтобы получить значение, указанное из него.Этот код равен этому:

int first = *((int*) first_arg);

и, если он все еще не ясен:

int *p = (int *) first_arg;
int first = *p;
1 голос
/ 05 августа 2011

Давайте подумаем об этом поэтапно.

void *vptr = first_arg;
int *iptr = (int *)first_arg; // cast void* => int*
int i = *iptr; // dereference int* => int

Итак, вы указываете тип данных, на который указывает указатель, а затем разыменовываете его.

1 голос
/ 05 августа 2011

Он приводит пустой указатель к целочисленному указателю и затем разыменовывает его.

0 голосов
/ 05 августа 2011

На ваш вопрос уже есть много ответов, это больше похоже на комментарий, который вы неизбежно изучите в своем стремлении освоить C и C ++.

Ваша функция слишком длинная. По ее названию я предсказываю, что вам действительно нужно:

int int_sorter( const void *first_arg, const void *second_arg )
{
    return *(int*)first_arg - *(int*)second_arg;
}
0 голосов
/ 05 августа 2011
int first = *(int*)first_arg;

Это то же самое, что и:

int* ptr_to_int = (int*)first_arg;
int first = *ptr_to_int;

Эта первая строка выполняет 2 действия: она переводит пустой указатель на int* и доступ к этой ячейке памяти для извлечениязначение, которое там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...