• ベストアンサー

ポインタ

c言語のポインタの意味がさっぱりわかりません。プロの方に聞いても「住所」っていうだけで自分ではなんじゃそりゃ!って感じです。「*」と「&」の意味もよくわからなく… だれかよろしくお願いいたします

質問者が選んだベストアンサー

  • ベストアンサー
  • mozura
  • ベストアンサー率100% (1/1)
回答No.3

プログラム初めて間もない人のようですので例えてみます 本で考えてみてください  ポインタ:ページ番号  データ:ページに書かれている情報 みたいなものです 「*」「&」の違いは 「*」データのページ番号 「&」データ自身のページ番号 みたいなものでしょうか 例の関数を書きますと下のような使い方ですかね void ZeroSet( int* out_iNum ){ *out_iNum = 0; //渡されたページに0を書く } main(){ int iTest; ZeroSet( iTest );//書き込むページ番号を渡す //この段階でiTestには"0"が入っています } 間違っていたら次の方訂正お願いします

その他の回答 (3)

  • mozura
  • ベストアンサー率100% (1/1)
回答No.4

ごめんなさい 例を間違えていました void ZeroSet( int* out_iNum ){ *out_iNum = 0; //渡されたページに0を書く } main(){ int iTest; ZeroSet( &iTest );//書き込むページ番号を渡す(訂正) //この段階でiTestには"0"が入っています }

takeaduma
質問者

お礼

a = 2; p = *a; だとしたら a(2)がかかれているページはpということですか 例を見て、理解はできました。

  • arain
  • ベストアンサー率27% (292/1049)
回答No.2

>プロの方に聞いても「住所」っていうだけで自分ではなんじゃそりゃ!って感じです。 いや、実際にそのとおりなんです。 プログラムはすべてメモリ上で動作します。このメモリには、1バイト単位ですべて「アドレス」というものが割り振られています。 地図でいう住所や番地と同じ意味と思ってください。 変数を宣言したりmalloc()を使用すると、メモリの空いているところから必要な分を確保します。 土地で言えば、未開拓の土地を家を建てたり公園にしたりするために造成したような感じです。 ポインタは「変数が確保されているメモリのアドレス」を格納しておくための専用の変数です。 土地に置き換えると「造成した土地は○○という場所だよ」ということが書いてあるのと同じです。 そのため「ポインタ」=「住所」という例えになります。

takeaduma
質問者

お礼

なるほど… 簡単なプログラムでは理解できるのですが、ループなどがあり、アドレスが変化するとチンプンカンプンになってしまいます。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

以下の各文はわかりますか? int a, b; int *p; a = 123; // aに123を代入 p = &a; // pはaを指す b = *p; // bは、ポインタpを経由して、aと同じ値になる

takeaduma
質問者

お礼

そこまではわかります。 a = 123; b = 123; ですよね。 でも大きなプログラムを作ると頭がこんがらがります;;

関連するQ&A