• 締切済み

ポインタについて

仕事でVB.NETでのアプリケーション開発をしています。 先日先輩から「ここはクラスAでデータベースから取得したデータを保持して他のクラスにポインタを渡せば、他のクラスでわざわざデータ取得する必要ないじゃん」って言われました。 しかし恥ずかしながらポインタというのがなんなのかまったくわかりません。 どなたか超初心者でもわかるように説明していただけないでしょうか? もしくはわかりやすいサイトを教えていただけないでしょうか? よろしくお願いいたします。

みんなの回答

回答No.5

ものすごくおおざっぱな言い方をすると、 「変数のポインタを渡す」は、「変数を参照渡しする」 と一緒と考えていいんじゃないかと思います。 そう置き換えると、たいがいの話が通じるんじゃないかと。

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.4

No.3さんの回答のとおりのようですね。たぶん、先輩はCかC++の言語がメインなので「ポインタ」という単語が出たのだと思えます。 ちょっと調べたところ、VB6からVB.NETに変わるとき、ポインターの概念よりもさらに難しいと思えるクラスライブラリが追加されています。となると、アセンブラ等を触ってポインターが理解できたとしても、さらにクラスの考え方と使い方を覚えないといけないのですね。 WindowsがMacの真似をして進化するように、VBやJava,C#はC++で成功した仕様を遅れて取り込もうとしていますので、本家であるC++を勉強すればVB.NETの仕様も理解しやすい気もします。(C++を真似た仕様の取り込みはあまり成功しているようには思えませんけどね。なんか複雑さが増すばかりのような・・・) 最近、C++の本を読んでいると、「最近は、言語仕様とか文法を覚えるだけでは、ほとんど役にたたない。ライブラリやクラス、テンプレートの使い方をマスタすることが必要だ」というようなことが書かれていました。そして、実際に使わないと覚えることはできない、とも。 とはいっても、ポインターの概念は大切ですので、頑張ってマスターしましょう。 P.S. C言語の解説に「配列はポインタと同じようなものだ」という説明がしばしばあります。でも似ているけど違います。このあたりの解説はアスキー出版の「エキスパートCプログラミング--知られざるCの深層/\3,107」の説明が分かりやすいです。お勧め!

  • don_go
  • ベストアンサー率31% (336/1059)
回答No.3

この場合は、「クラスAでデータベースから取得したデータ を保持して他のクラスに*引数で*渡せば、他のクラスで わざわざデータ取得する必要ない」で良いのでは?

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.2

昔のVBは触っていましたが、最新のVB.NETは使っていませんけど・・。基本的には、VBではポインターを使うコーディングは使えなくはないにしても使いにくいし、そもそも、そういうコーディングはしないのが普通ではないでしょうか?また.NETでは、直接ポインターを操作することはC#でも禁じ手(使えないことはないが面倒な手順が必要)なので、わからないのも無理ないと思えます。 ポインタで処理すれば、データ本体のコピーをすることなく、データの収容されたメモリアドレス先頭位置さえ渡せばいいため、1GBの巨大データもアドレス情報の受け渡しだけで済むので処理速度で大いに有利です。 ただ、クラスで処理するってことは、目に見えないところでポインターを使いまくっていることです。(Javaもそうですね)ですので、もしかすると、先輩の言うようなポインターを活用した手法があるのかもしれません。 でも、ユーザにプログラムでポインターをコントロールさせるっていうことは、.NETシステムのコンセプトを根底から崩すことになる気がしますので、知らないほうがいいのかもしれませんね。 ちなみに、ポインターを理解するには8bit系CPUのアセンブラ言語を勉強するのが一番です(16bit系以上は難しいので)。あるいは、C言語のソースと、Cのコンパイラーオプション指定で得られるアセンブラーソースを対比して調べるのもいいと思います。

  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.1

ポインタ 用語で、検索すると良いでしょう。 下記は、あるサイトからの抜粋です。 内容を読んでも難解なことばかりですね。 遠慮せず上司や先輩に聞きましょう。 質問できるのは、いまのうちですよ。 時間がたってからは、質問し辛いですよ。 ポインタとは  プログラミング言語において、ある変数の内容が格納されている場所の位置情報を保持する変数。C/C++言語におけるポインタは、メモリ空間内のアドレスをそのまま数値として保持している。  C/C++言語では、関数の引数としてポインタを渡すことで(参照渡し)、関数内でポインタの指し示す変数の内容を直接書き換えることができる。またポインタをインクリメントしながらその指し示す場所へアクセスすることで、変数が連続して記憶されているデータ構造(配列)を実現することができる。他にも、データ構造体に次のデータ構造体の位置情報を持たせることによってデータ構造体を連結させた連結リスト構造や、その他の複雑なデータ構造を実現する上でもポインタは不可欠である。  C/C++言語では、関数の実行コードが格納されている場所もポインタ(関数ポインタ)として扱うことができる。これを利用して、ある関数に別の関数を指し示すポインタを引数として渡し、渡した先でその関数を実行するというテクニックが使える。  C/C++言語においてはポインタを使うことでプログラミングの自由度が高くなる反面、実行コード領域を含めたあらゆるメモリ領域にポインタを用いてアクセスできてしまうために、バッファオーバーフローなどによって予期せぬ不具合を生む原因ともなるため、注意して使う必要がある

関連するQ&A