![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
質問失礼します。
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 関数ポインタの高速化のメリット 7 2023/05/05 20:15
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- Oracle ビットで表せる数値について 3 2022/09/12 16:37
- Outlook(アウトルック) Outlook2019でのメール転送について 3 2023/04/30 17:06
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- 哲学 説得力を修辞の巧みさまたは論理の強さの2つに分析するにはどうすると良いでしょうか? 0 2022/07/20 05:46
- 固定IP MACアドレスはLAN内で相手を特定するアドレスですか? PCから監視カメラを閲覧するときに、セグメ 3 2022/07/23 09:04
- C言語・C++・C# いまc言語を独学で勉強しているのですがいまいちわかりません。 https://monozukuri- 3 2023/07/06 18:59
- 車検・修理・メンテナンス ハンドルを切った際の音について。 4 2023/08/13 23:29
- docomo(ドコモ) SIMロック、またはSIMロック解除の仕組みをおしえてください。 5 2022/04/25 10:57
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のポインタに直接アドレス...
-
init関数の意味
-
セグメントエラー
-
Run-Time Check Failure #3とい...
-
fopne で失敗する原因
-
戻り値で構造体を返すことは可...
-
ExcelVBAでのkernel32(64bit)
-
ハンドル、アドレス、ポインタ...
-
構造体とfscanf
-
DXライブラリ:ポインタと配列?
-
デバイスハンドルとは?
-
どうしてエラーになるかわかり...
-
Cで作成したDLL関数をVBから呼...
-
C言語の関数と配列に関する質問
-
▼C言語 ポインタ
-
ポインタの結合に関する質問です
-
お絵かきソフトにUNDO、REDOを...
-
IStream / VBA
-
コンストラクタでnewを失敗した...
-
NULLポインタが0でない処理系と...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
セグメントエラー
-
init関数の意味
-
C言語のポインタに直接アドレス...
-
fopne で失敗する原因
-
Run-Time Check Failure #3とい...
-
C言語の関数と配列に関する質問
-
LPSTR型の初期化について
-
戻り値で構造体を返すことは可...
-
参照型で受け取った引数をポイ...
-
構造体とfscanf
-
ExcelVBAでのkernel32(64bit)
-
アプリを32bitから64bit移行
-
Cで作成したDLL関数をVBから呼...
-
C言語でのconstを返す関数
-
main(int argc,char **argv[])...
-
DLL<->VB間での受け渡し(文字...
-
エラーの意味
-
PASCALとFARの意味
-
ハンドルはポインタか
-
CWnd::EnableWindow()の扱い方
おすすめ情報