#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的指针
答案 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;
}