可能性の重複:C++でvoidポインタとは何ですか?
void * foo(int bar);
これはどういう意味:私は、多くの場合、以下のようなものに似ているコードを参照してください
What is a void pointer and what is a null pointer?
? 何かを返すことができますか?これはC#のdynamic
またはobject
に似ていますか?
可能性の重複:C++でvoidポインタとは何ですか?
void * foo(int bar);
これはどういう意味:私は、多くの場合、以下のようなものに似ているコードを参照してください
What is a void pointer and what is a null pointer?
? 何かを返すことができますか?これはC#のdynamic
またはobject
に似ていますか?
void*
は何も意味しません。これはポインタですが、ポインタが指している型はわかりません。
「何か」を返すことはできません。 void*
を返す関数は、一般的に次のいずれかを実行しています。
operator new
とmalloc
が返すもので、特定のサイズのメモリブロックへのポインタです。メモリは型を持たないので(まだ正しく構成されたオブジェクトがないため)、型がありません。 IE:void
。これは、C#でdynamic
またはobject
などの何もではありません。これらの構文は実際に元の型が何であるかを知っています。 void*
はではありません。これは、それを間違ってしまうのは非常に簡単なので、それらのいずれよりもはるかに危険です。
個人的には、void*
の「頻繁」を使用するコードがある場合は、あなたが見ているコードを再考する必要があります。 void*
の使用法、、特に(C++)はまれであり、未処理メモリを処理するために使用されます。
ありがとう+1のvoid *をC#/ Javaの 'Object' – KGCybeX
void *は何かを指すことができます(タイプ情報のない生のポインタです)。
ポインタは何でも指すことができます。 –
void*
ポインタは、タイプを指定せずにメモリのハンクへのポインタを示す場合に使用します。 Cのmalloc
は、そのようなポインタを返すので、そのポインタを特定の型に直ちにキャストする必要があります。別のポインタ型にキャストするまでは、実際には役に立ちません。どの型をキャストするかを知っていることが期待されますが、コンパイラには基になる型を知るためのリフレクション機能はありません。
Cでは、 'void *'が実際のポインタ型に自動的に昇格するので、Cの 'malloc'はすぐに別のものにキャストすることを実際には期待しません:http://stackoverflow.com/q/605845/ 837703。 C++は別の話ですが、とにかくC++で 'new'を使うはずです。 –
@ArkaMajumdar暗黙のキャストはまだキャストされています。ポインターのタイプが変わります。これが有用です。 –
キーワードはVoidです。 voidポインタは汎用ポインタとも呼ばれ、任意のデータ型のオブジェクトをポイントできる特別なタイプのポインタです。
一般的な構文::
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* pointer_variable;
void *pVoid; // pVoid is a void pointer
のvoidポインタはポインタの型としてボイドキーワードを使用して、通常のポインタのように宣言されています
しかし、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
C++では、最後の3行は、C のように明示的に 'void *'にキャストする必要があるため、コンパイルエラーが発生します。 –
@ User1988あなたの投稿を編集する方法を学んでください。 –
コード例は現在動作してありがとうございます。私にとって、この質問とトップ2の回答は、リンクされた「重複」よりも簡潔で指摘されています。 – Garrick
類似の質問へのリンク:http://stackoverflow.com/questions/4334831/what-is-a-void-pointer-and-what-is-a-null-pointer – ksming
「ダイナミック」とは関係がありませんオブジェクトとの「全体的な類似性」に過ぎない。 –