2012-10-22 79 views
-4

可能重複:
What does (char *) x or (void *) z mean?C++ ::雙冒號標記和(無效*)

我用C工作++文件,並遇到了下面一行:

tmp.sort(Hash::pairval, printPair, (void *)(tmp.bitSize())); 

我最不確定的是(void *)的含義。 bitsize()是一個函數,我之前聽說過傳遞函數指針的術語。這是什麼?

我知道::通常是範圍解析運算符,這是我在.cpp/.h對象類型文件中看到的。我相信它在這裏服務於相同的目的,陳述在哈希中找到pairval。

由於

+2

RTFM和(最可能)重複。另外:問答網站=>一個職位=一個問題。 – Griwes

回答

0

的(無效*)tmp.bitSize()的返回值被簡單地轉換爲一空隙指針類型。在C++和C中,Casting是非常常見的操作。

+0

「void type」!=「指向無效」 – Griwes

+2

其對**的指針**'void' –

+0

@ K-ballo對不起,錯過了那個單詞。請參閱我的編輯。 –

0

Hash::pair

最有可能以Hash類的靜態成員的呼叫。

(void*)部分是一個虛擬指針tmp.bitSize(),它最有可能返回某種價值。所以沒有函數指針。

0

我最不確定什麼(void *)的含義。 bitsize()是一個函數,我之前聽說過傳遞函數指針的術語。這是什麼?

沒有。請注意圓括號,tmp.bitSize()是一個調用的函數調用表達式,並返回一個值。因此 - 這裏沒有涉及函數指針。

然後將返回值轉換爲指向void類型的指針(即catch-all指向某種「類型」的指針),以便傳遞給期望此類指針的函數。

爲什麼地球上會有人將位尺寸(看起來像一個數字)轉換爲指針,我不知道。這是介於可疑和不正確之間的地方。

請閱讀casting in C++。不鼓勵C型演員陣容,並且由於strict aliasing rule,鑄造到void*很少有用,並且經常是危險的。

知道::通常是範圍解析運算符,這是我在.cpp/.h對象類型文件中看到的。我相信它在這裏服務於相同的目的,陳述在哈希中找到pairval。

這是正確的。