关于c ++演员问题

时间:2011-08-05 18:04:07

标签: c++ type-conversion typecast-operator

#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 个答案:

答案 0 :(得分:4)

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

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

并且,如果仍然不清楚:

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

答案 1 :(得分:1)

它正在向一个整数指针转换一个void指针,然后将其解除引用。

答案 2 :(得分:1)

让我们分步考虑一下。

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

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

答案 3 :(得分:0)

int first = *(int*)first_arg;

它与:

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

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

答案 4 :(得分:0)

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

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

int int_sorter( const void *first_arg, const void *second_arg )
{
    return *(int*)first_arg - *(int*)second_arg;
}