![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
質問失礼します。
VB2005においてプログラミングをしようしているのですが、作っている途中で用語に躓いてしまいました。
ハンドル、アドレス、ポインタというのは具体的に何を表すのでしょうか?
自分が使うプログラムのコードを確認していて、GCHandleという構造体を見つけました。
これを理解するにはハンドル、アドレス、ポインタの理解が必要だと聞いたのですが、さっぱりわかりません。
幸いGCHandleについては、「勝手に処理されないようにするために必要なんだな」くらいのことは理解しましたが、ハンドル、アドレス、ポインタの概念を理解できていないせいか、その程度の理解で終わってしまいます。
よろしくお願いいたします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
ざっくりとしたイメージとして、
メモリの中身をイメージしてください
といっても難しいので
マトリックスの流れる数字、
ずらっと数字の羅列のイメージでいいです
判りやすく、円周率の数字がずらっとあるのを
イメージしましょう
3.141592653589793238462643383279502884197169399375105820974944
円周率の、少数点以下 25桁目といわれた場合、
ココ!! って指を指し示す=ポインタ、
25桁目、の25って言うのがアドレスです。
次の桁といった場合、ポインタを1つ次へずらす、
アドレスであれば、26桁目なので、26 と表現する
ポインタには通常型が存在し、たとえば、5桁で1つのまとまりの
場合は、ポインタを1つ次へずらす事は、
アドレスであれば、25桁目 -> 30桁目に移動する事となります
つまりポインタは、メモリ上にある指定されたひとかたまり型の
先頭のアドレスの事をいい
Integer 型なら 4 Byteで1かたまりの型
BYTE 型なら 1 Byte で1かたまりの型、
構造体、クラス、関数であれば、それで1かたまりの型となり
その先頭のメモリのアドレス を指し示すものをポインタと言います
ハンドルとは、ポインタで指し示したメモリの中身の話になりますが
たとえば、ファイルであれば、
ファイルをオープンする
ファイルを読込む
ファイルに値を書き込む
ファイルをクローズする
それぞれが別々の関数として存在するのですが
一連の作業では、同じメモリ領域を必要とします
なので、たとえばオープンする関数で、共有するポインタを取得、
或いは作成し、その共有のポインタを引数としてもらう事で、
読込む、或いは書き込む為のファイルの情報が格納されたメモリ
を取得、処理をして、
最後にクローズする関数で共有しているメモリを解放します
この一連の共有するポインタ(の中身の事)をハンドルと言い
ファイルであれば、ファイルハンドルと言ったりします。
No.2
- 回答日時:
>C言語上というお話ではありますが、
すみません、C言語のカテゴリと
間違って回答しておりました。
>それはVisual Basicにおいても同じであるのでしょうか?
参照渡し、値渡しといった部分はVBでも
ByRefやByValというように存在します。
内部の実装は異なると思いますが。
機能的な差異はほとんどありません。
C言語と違うのはメモリの確保解放の管理を
”絶対にプログラマが管理しなければならないか”
という違いです。
アドレスについても基本的には
メモリの番地を示す用語なので、
言語を問わず、基本的に共通です。
ハンドル型というのはそもそも、
プログラム的にどの型が必要かということを
明確にしているに過ぎません。
オブジェクトの”型”という概念を持つ言語において、
そのように扱うという位置づけなので、概念としては
言語を問わないと思います。
逆に変数がどんな値も格納できてしまう言語では、
このような概念は存在しません。
#何でも渡せるので区別する必要がありません。
No.1
- 回答日時:
ポインタとはC言語上での変数への参照を実装するための概念で
ポインタ型とは特定の変数型などから派生することができ、
参照先の実体を表す事のできる値を持つオブジェクトのことを言います。
C言語では、この「実体を表す事のできる値」としてアドレスが使用され、
「参照渡し」は存在せず、アドレスを「値渡し」することで、
参照が実装されています。
アドレスとは、メモリの番地、或いは、特定の領域を表す値として、
「アドレス」という言葉が用いられます。
C言語では、アドレス定数、またはアドレス演算子によって、
この値を表現することができます。
ハンドルとは、C言語においては特定の型情報のみを外部に公開する為の手段です。
故に、その中身がポインタであるか、構造体であるか、
またはint型などの数値であるかは実装によって異なります。
車のハンドルと同じで、コントロールする為に必要なものを指しています。
その実装において制御する為に必要な情報をハンドルと呼んでいるに過ぎません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
init関数の意味
-
C言語のポインタに直接アドレス...
-
ハンドル、アドレス、ポインタ...
-
DirectXのDIRECT3DTEXTURE9
-
C言語でのconstを返す関数
-
C++で関数ポインタから関数名を...
-
セグメントエラー
-
【C言語】別関数でポインタの値...
-
ハンドルはポインタか
-
LPSTR型の初期化について
-
プログラミングのfarについて
-
CWnd::EnableWindow()の扱い方
-
戻り値で構造体を返すことは可...
-
どうしてエラーになるかわかり...
-
デバイスハンドルとは?
-
構造体内のポインタのポインタ...
-
【C言語】戻り値が構造体の関数
-
基本アルゴリズムの『返す』の...
-
C言語のvoid型ポインタ変数につ...
-
ポインタいついて教えてください
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
セグメントエラー
-
C言語のポインタに直接アドレス...
-
fopne で失敗する原因
-
init関数の意味
-
Run-Time Check Failure #3とい...
-
戻り値で構造体を返すことは可...
-
C言語でのconstを返す関数
-
参照型で受け取った引数をポイ...
-
LPSTR型の初期化について
-
main(int argc,char **argv[])...
-
アプリを32bitから64bit移行
-
連結リスト 要素の入れ替え
-
Cで作成したDLL関数をVBから呼...
-
構造体とfscanf
-
CImage GetBitsメソッドについて
-
c言語で任意のファイルから読み...
-
ハンドルはポインタか
-
ExcelVBAでのkernel32(64bit)
-
基本アルゴリズムの『返す』の...
-
CWnd::EnableWindow()の扱い方
おすすめ情報