汎用ポインタを使う2014-11-06cppTweetint型のポインタとchar型のポインタは違う型のため、同じものとして扱うことは出来ません。実際にはポインタ型はメモリ上の特定アドレスを示すもののため、どの型のポインタであっても、データ自体はメモリ上のアドレスを示す何bitかの数値であり、全く同じです。(勿論、ポインタの示すアドレスに何があるかは異なります)そのため、ポインタ専用の変数を利用することで、あらゆる型のポインタを同じ変数に代入することができます。コンパイラの型チェックが効かなくなる等の理由から、基本的にはオススメできない手法です。C++の場合はテンプレートやクラスの継承、dynamic_castで解決できる場合はそちらを利用した方が安全です。*型は汎用ポインタと呼ばれ、あらゆるポインタを代入することができます。これはたとえば以下のように、何の型かは指定しないけど、変数として持ちたいという場合に利用できます。様々な型を1つの変数で扱うことが出来ます。*から元の型に戻す際のキャストは全て正しいと処理されます。そのため、おかしくなるキャストをしていてもコンパイラの型チェックでエラー検出が出来ません。*を使わず、テンプレートやクラスの継承、dynamic_castで解決した方が安全です。*はmallocの戻り値としても使われています。http://www.cplusplus.com/reference/cstdlib/malloc/mallocの戻り値が何にでもキャスト出来るのは、この仕様によるものです。ポインタを整数値として扱うポインタを整数値として利用したい場合、intptr_tとuintptr_tが利用できます。これはそれぞれ符号つき、符号なしの整数として扱うことができます。間違ってもそのままintにキャスとして代入してはいけません。ota42yC++/Ruby/RoR/golang/rust/flutter。