
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
ものすごくおおざっぱな言い方をすると、
「変数のポインタを渡す」は、「変数を参照渡しする」
と一緒と考えていいんじゃないかと思います。
そう置き換えると、たいがいの話が通じるんじゃないかと。
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」の説明が分かりやすいです。お勧め!
No.2
- 回答日時:
昔のVBは触っていましたが、最新のVB.NETは使っていませんけど・・。
基本的には、VBではポインターを使うコーディングは使えなくはないにしても使いにくいし、そもそも、そういうコーディングはしないのが普通ではないでしょうか?また.NETでは、直接ポインターを操作することはC#でも禁じ手(使えないことはないが面倒な手順が必要)なので、わからないのも無理ないと思えます。ポインタで処理すれば、データ本体のコピーをすることなく、データの収容されたメモリアドレス先頭位置さえ渡せばいいため、1GBの巨大データもアドレス情報の受け渡しだけで済むので処理速度で大いに有利です。
ただ、クラスで処理するってことは、目に見えないところでポインターを使いまくっていることです。(Javaもそうですね)ですので、もしかすると、先輩の言うようなポインターを活用した手法があるのかもしれません。
でも、ユーザにプログラムでポインターをコントロールさせるっていうことは、.NETシステムのコンセプトを根底から崩すことになる気がしますので、知らないほうがいいのかもしれませんね。
ちなみに、ポインターを理解するには8bit系CPUのアセンブラ言語を勉強するのが一番です(16bit系以上は難しいので)。あるいは、C言語のソースと、Cのコンパイラーオプション指定で得られるアセンブラーソースを対比して調べるのもいいと思います。
No.1
- 回答日時:
ポインタ 用語で、検索すると良いでしょう。
下記は、あるサイトからの抜粋です。
内容を読んでも難解なことばかりですね。
遠慮せず上司や先輩に聞きましょう。
質問できるのは、いまのうちですよ。
時間がたってからは、質問し辛いですよ。
ポインタとは
プログラミング言語において、ある変数の内容が格納されている場所の位置情報を保持する変数。C/C++言語におけるポインタは、メモリ空間内のアドレスをそのまま数値として保持している。
C/C++言語では、関数の引数としてポインタを渡すことで(参照渡し)、関数内でポインタの指し示す変数の内容を直接書き換えることができる。またポインタをインクリメントしながらその指し示す場所へアクセスすることで、変数が連続して記憶されているデータ構造(配列)を実現することができる。他にも、データ構造体に次のデータ構造体の位置情報を持たせることによってデータ構造体を連結させた連結リスト構造や、その他の複雑なデータ構造を実現する上でもポインタは不可欠である。
C/C++言語では、関数の実行コードが格納されている場所もポインタ(関数ポインタ)として扱うことができる。これを利用して、ある関数に別の関数を指し示すポインタを引数として渡し、渡した先でその関数を実行するというテクニックが使える。
C/C++言語においてはポインタを使うことでプログラミングの自由度が高くなる反面、実行コード領域を含めたあらゆるメモリ領域にポインタを用いてアクセスできてしまうために、バッファオーバーフローなどによって予期せぬ不具合を生む原因ともなるため、注意して使う必要がある
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VBでC言語のポインタみたいな使い方?
Visual Basic(VBA)
-
文字列の後ろから必要分だけ削除したい。
Visual Basic(VBA)
-
「タイプ初期化子が例外をスローしました」エラー何?
Visual Basic(VBA)
-
-
4
DLL<->VB間での受け渡し(文字列・ポインタ)
Visual Basic(VBA)
-
5
VB.netで、動的な型変換を行いたいのですが、、、(CTypeではできない?!)
Visual Basic(VBA)
-
6
textboxユーザーコントロールのコピー&ペースト制御
Visual Basic(VBA)
-
7
VB.NETでのnothing の意義について
Visual Basic(VBA)
-
8
イベントにAddHandlerされているか判断
Visual Basic(VBA)
-
9
VB.net 引数で配列変数を渡す際の要素数
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAでのkernel32(64bit)
-
Run-Time Check Failure #3とい...
-
C言語のポインタに直接アドレス...
-
参照型で受け取った引数をポイ...
-
戻り値で構造体を返すことは可...
-
コンストラクタでnewを失敗した...
-
どうしてエラーになるかわかり...
-
ポインタのポインタとrealloc
-
ハンドルはポインタか
-
引数のポインタについて
-
#define NULL ((void *)0) の弊害
-
セグメントエラー
-
自作関数の引数
-
変数の中身がごみかどうか判定...
-
C++で変数の型を途中で切り替え...
-
C言語の文字列?処理 strcpyやl...
-
TCHAR文字列内の検索について
-
配列を使わずに、変数名を動的...
-
C# DataGridView のヘッダーセ...
-
Integer変数をカラにしたいので...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語のポインタに直接アドレス...
-
init関数の意味
-
Run-Time Check Failure #3とい...
-
ExcelVBAでのkernel32(64bit)
-
セグメントエラー
-
#define NULL ((void *)0) の弊害
-
fopne で失敗する原因
-
LPSTR型の初期化について
-
トリプルポインタが必須!とな...
-
戻り値で構造体を返すことは可...
-
c言語で任意のファイルから読み...
-
参照型で受け取った引数をポイ...
-
ポインタについて
-
アプリを32bitから64bit移行
-
ハンドル、アドレス、ポインタ...
-
ポインタが文字化けしてる?!...
-
NULLポインタが0でない処理系と...
-
ハンドルはポインタか
-
リトルエンディアンというもの...
-
【C言語】戻り値が構造体の関数
おすすめ情報