2011-08-05 117 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