4
#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 的指针

这里有点困惑。谢谢

?

4

5 回答 5

6

first_arg 被声明为 void*,因此代码从 void* 转换为 int*,然后它取消引用指针以获取指向它的值。该代码等于这个代码:

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

并且,如果仍然不清楚:

int *p = (int *) first_arg;
int first = *p;
于 2011-08-05T18:07:06.380 回答
1

它将一个 void 指针转换为一个整数指针,然后取消引用它。

于 2011-08-05T18:07:03.523 回答
1

让我们逐步考虑它。

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

因此,您要指定指针指向的数据类型,然后取消引用它。

于 2011-08-05T18:07:25.060 回答
0

你的问题已经有很多答案了,这更像是一个评论,你在掌握 C 和 C++ 的过程中不可避免地会学到一些东西。

你的函数太长了。从它的名字,我预测你真正需要的是:

int int_sorter( const void *first_arg, const void *second_arg )
{
    return *(int*)first_arg - *(int*)second_arg;
}
于 2011-08-05T18:12:36.743 回答
0
int first = *(int*)first_arg;

它与以下内容相同:

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

第一行做了两件事:它将 void 指针转换为 anint* 访问该内存位置以检索那里的值。

于 2011-08-05T18:06:54.967 回答