可能重複:
What is a void pointer and what is a null pointer?什麼是C++中的void指針?
我經常看到代碼,類似於像下面這樣:
void * foo(int bar);
這是什麼意思?這是否意味着它可以返回什麼?這與C#中的dynamic
或object
類似嗎?
可能重複:
What is a void pointer and what is a null pointer?什麼是C++中的void指針?
我經常看到代碼,類似於像下面這樣:
void * foo(int bar);
這是什麼意思?這是否意味着它可以返回什麼?這與C#中的dynamic
或object
類似嗎?
A void*
並不意味着什麼。它是一個指針,但它指向的類型是未知的。
這並不是說它可以返回任何東西。返回void*
的函數一般會執行以下操作之一:
operator new
和malloc
返回的內容:指向特定大小內存塊的指針。由於內存沒有類型(因爲它沒有一個適當構造的對象),它是無類型的。 IE:void
。這是什麼像dynamic
或object
在C#。那些結構實際上知道原始類型是什麼; void*
不是。這使得它比其中任何一個更危險,因爲它很容易弄錯。
並且在個人記錄中,如果您看到使用void*
的「經常」代碼,則應該重新考慮您正在查看的代碼。 void*
用法,尤其是在C++中應該很少見,主要用於處理原始內存。
void *可以指向任何東西(這是一個沒有任何類型信息的原始指針)。
任何指針都可以指向任何東西。 – 2011-12-16 05:21:46
A void*
指針用於指示指向大塊內存而不指定類型的指針。 C的malloc
返回這樣一個指針,期望您立即將其轉換爲特定類型。直到將其轉換爲另一個指針類型時,它才真正有用。您需要知道將其轉換爲哪種類型,編譯器沒有反射能力來知道底層類型應該是什麼。
那麼,C的`malloc`實際上並不期望你立即將它轉換爲其他東西,因爲在C中,`void *`會自動提升爲一個真正的指針類型:http://stackoverflow.com/q/605845/ 837703。 C++是一個不同的故事,但你應該在C++中使用`new`。 – 2015-07-11 22:12:48
@ArkaMajumdar隱式演員仍然是演員。指針的類型發生變化,這使得它變得有用。 – 2015-07-12 00:44:28
Void用作關鍵字。指針,也稱爲泛型指針,是一種特殊類型的指針,可以指向任何數據類型的對象!一個空指針被宣佈像一個正常的指針,用void關鍵字作爲指針的類型:
常規語法:
void* pointer_variable;
void *pVoid; // pVoid is a void pointer
一個空指針可以指向任何數據類型的對象:
int nValue;
float fValue;
struct Something
{
int nValue;
float fValue;
};
Something sValue;
void *pVoid;
pVoid = &nValue; // valid
pVoid = &fValue; // valid
pVoid = &sValue; // valid
但是,由於void指針不知道它指向的是什麼類型的對象,因此無法解除引用!相反,void引用必須首先明確地轉換爲另一個指針類型,然後才能解除引用。
int nValue = 5;
void *pVoid = &nValue;
// can not dereference pVoid because it is a void pointer
int *pInt = static_cast<int*>(pVoid); // cast from void* to int*
cout << *pInt << endl; // can dereference pInt
類似問題的鏈接:http://stackoverflow.com/questions/4334831/what-is-a-void-pointer-and-what-is-a-null-pointer – ksming 2011-12-16 05:17:46
它與`動態無關`並且與`object`只有很大的「相似性」。 – 2011-12-16 05:18:02