ログイン
編集不可のページディスカッション情報添付ファイル
"jones_million/study/pointer"の差分

MMA
1と2のリビジョン間の差分
2011-05-06 00:17:48時点のリビジョン1
サイズ: 1966
編集者: jones_million
コメント:
2011-05-06 00:35:43時点のリビジョン2
サイズ: 1981
編集者: jones_million
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 5: 行 5:
ウィーンガコンてな感じである. まあうん,ウィーンガコンてな感じである.

俺がポインタをどう腑に落としているか

  • ポインタとはなんなのかは,とりあえずこれを観てほしい.

address.jpg まあうん,ウィーンガコンてな感じである.

  • ほんでもってつまずいたところは
    • 第一に,ポインタ宣言子と間接参照演算子が同記号なのが困る.*(アスタリスク)
    • 第二に,ポインタの初期化がポインタを宣言した時点でできるということ.

具体的にみていこう

int a;
int *pa;

pa=&a;

ポインタ宣言後に初期化をしている

int a;
int *pa=&a;

ポインタ宣言時に初期化をしている

ポインタは基本的にアドレスしか扱う事はできないが,間接参照演算子*という魔法の言葉で,ポインタの指しているアドレスの変数に値を渡す事ができるのだ.

  • ここで思い出してほしい.ポインタ宣言子と間接参照演算子は同記号なのである.(アスタリスク*)
  • ここで私は混乱した.デバック時にこのアスタリスクはポインタ宣言子なのだろうか?それとも,間接参照演算子なのだろうか?と迷う事があるのである.

このことは参考書などで流されてしまっていて,参考書の初めのほうでは律儀にポインタを宣言した後で初期化をしているのだが,参考書の後ろのほうになると,ポインタ宣言時に初期化をするような形で統一されてしまっている.

そこで デバック時に

int *pa =&a;

等の記述を見たとき, アスタリスクの後になぜアドレスを代入してるんだー間接参照演算子じゃないのかよーとか思っちゃって,混乱をきたしてしまうことが結構あるので,

int* pa = &a;

という風な記述をオススメする.

jones_million/study/pointer (最終更新日時 2011-05-06 00:35:43 更新者 jones_million)