[解決済み] C++のvoidポインタとは何ですか?重複
2022-12-25 16:50:02
質問
重複の可能性があります。
voidポインタとnullポインタとは何ですか?
以下のようなコードをよく見かけます。
void * foo(int bar);
これはどういう意味なのでしょうか?を返すことができるということでしょうか?
何でも
? これは
dynamic
または
object
をC#で使うか?
どのように解決するには?
A
void*
は何も意味しない。これはポインタですが、それが指す型は不明です。
"anything"を返すことができるというわけではありません。を返す関数は
void*
を返す関数は、一般に次のいずれかを行っています。
-
フォーマットされていないメモリーを扱っている。これは
operator new
とmalloc
return: 一定の大きさのメモリブロックへのポインタ。このメモリは型を持たないので(まだ適切に構築されたオブジェクトが入ってないので)、型なしです。IEでvoid
. - これは不透明なハンドルです。特定の型を指定することなく、作成されたオブジェクトを参照します。これは、構造体/クラスを前方に宣言し、単にそれに対するパブリック定義を提供しないことによってよりよく行われるため、これを行うコードは一般的に不完全な形式である。なぜなら、その場合、少なくともそれは実際の型を持っているからです。
- これは、既知の型のオブジェクトを含むストレージへのポインタを返します。しかし、その API は多種多様な型のオブジェクトを扱うために使用されるため、特定の呼び出しが返す正確な型はコンパイル時に知ることができない。したがって、いつどの種類のオブジェクトを格納し、したがってどの型に安全にキャストできるかを説明するドキュメントが存在することになります。
この構成は
何もない
のように
dynamic
または
object
をC#で使うことができます。これらのツールは実際に元の型が何であるかを知っています。
void*
は知りません。
. このため、非常に簡単に間違うことができ、特定の使い方が正しいかどうかを尋ねる方法がないため、これらのどれよりもはるかに危険です。
また、個人的なことですが、もしあなたが
void*
が使われているコードを見たら、どんなコードを見ているのか考え直すべきでしょう。
void*
の使い方を考えてみてください。
特に
を使用することは稀で、主に生のメモリを処理するために使用されます。
関連
-
[解決済み】coutはstdのメンバではない
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] ルール・オブ・スリーとは?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み】なぜC++プログラマは'new'の使用を最小限に抑えなければならないのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】coutはstdのメンバではない
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み】Visual Studio 2013および2015でC++コンパイラーエラーC2280「削除された関数を参照しようとした」が発生する
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み] mallocの結果はキャストするのですか?