2011-08-05 36 views
2
#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; 
    } 
} 

在这段代码中,这行代表什么意思?关于C++演员问题

int first = *(int*)first_arg; 

我认为它是类型转换。但是,从

的指针为int 到 指针为int

有点困惑在这里。 谢谢

+0

这就像reinterpret_cast,你是取消引用指针得到一个int。 – 2011-08-05 18:07:06

+0

'stdlib.h'在C++中已被弃用。 –

回答

4

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

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

,如果它仍然是不明确的:

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

谢谢。明确的解释。 –

+0

@David Degea:不客气;) – BlackBear

0
int first = *(int*)first_arg; 

这是一样的:

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

也就是说第一行做两两件事:它施放空指针的int*访问该存储器位置检索的存在价值。

1

它将一个void指针转换为整型指针,然后对其进行解引用。

1

让我们想想中的步骤。

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

因此,您指定指针指向的数据类型,然后对其进行解引用。

0

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

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

​​3210