• ベストアンサー

ポインタ

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% (2126/6286)
回答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

  • C言語のポインタとスタックポインタ

    プログラム始めて1ヶ月の初心者です。 C言語のポインタとスタックポインタというのは同じなのでしょうか。 スタックポインタの考えは大体理解出来たのですが C言語のポインタとなるとコードを見てもサッパリ分かりません。 ネットで調べても出てこなかったのでどなたか教えて下さい。 よろしくお願いします。

  • ポインタ

    C言語のポインタみたいなことはできないかなと思い、 <? function a ($a){ print $a; $a="z"; } $c = "x"; a(&$c); print $c; ?> と興味本位でやってみたところ、 xz と表示されました。googleで "php ポインタ" と検索してもそれっぽい解説をみつけられなかったのですが、phpではC言語のポインタっぽい挙動をみせるこの機構をなんというのでしょうか・・・?(perlではリファレンスだった)

    • ベストアンサー
    • PHP
  • ポインタについてアドバイスお願いします。

    C言語の初心者です。 参考書でも書かれている事があるのですが、経験豊富な方でもポインタについて知ってるようで知ってないということがあります。って読んだことがあります。 実際、ポインタの必要性とはどのような時に必要なのでしょうか?? アドレス指定と言う風に、はじめはこの様な理解から入ると習いましたが、私には配列で十分間に合うのでは??って思っちゃうのです。 構造体の出力、アドレスの入れ替え、こんなときには便利なのかもしれませんが、C言語をやる上で絶対に必要・・、いったいなぜ??って考えちゃいます。 初心者なのに生意気な事言ってしまってもうしわけございません。 以前、私もそんな感じで悩んだ事あるって方がいらっしゃいましたら、ポインタとはこんな感じの時に初めて必要だと思うのだ!とご教授お願いいたします。 この様な質問に対しても、笑って答えてくださるような プロフェッショナルの方や、一般の凄い方のアドバイス、お待ちいたしております。 宜しくお願いいたします。

  • ポインタ

    C言語で、 int c[6]と配列を作って、 ポインタでc[100]を指定すると、COREがでますよね? これをやると、コンピュータがフリーズする場合があるのですがなぜですか?

  • ポインタについて

    C言語のポインタの宣言の仕方についての質問です。お詳しい方どうかご回答よろしくお願いいたします。 (1)char *p; (2)char* p; 上記2つの宣言はどう違うのでしょうか??(同じものなのでしょうか??)メモリの確保の仕方などに違いがあるのでしょうか?? また、この両者はどのように使い分ければ良いかなどお教えください。 よろしくお願いいたします。

  • C言語のポインタについて

    C言語のポインタ(配列もポインタに含まれるのか?)について質問です。 係数を行列形式で表される状態方程式などの2変数以上の方程式を解くプログラムにおいてよくポインタや配列が使われているのですが、なぜポインタや配列を使うのでしょうか?利点など詳しく教えていただけませんでしょうか。。。 どなたか分かる方よろしくお願いします(*_*)

  • なぜポインタという概念が誕生したの?

    C言語には「ポインタ」という概念がありますが、そもそもなぜ「ポインタ」という概念が生まれたのですか? 「ポインタ」という概念が生まれた背景は何なんでしょうか? 当時、メモリの性能が貧弱だった為、それを有効に活用する為に生まれたのでしょうか? それに、「ポインタ」という概念がないとどうなるのでしょうか? 回答のほうよろしくお願いします。

  • 配列とポインタの違いについて

    書籍などで配列とポインタの違いについて勉強していますが、未だによくわかりません。 C言語における配列とポインタの違いについて教えて頂けますでしょうか?

  • NULLポインタは0と書かなければだめ?

    C++言語を使っています。 C++言語でNULLポインタを表す場合、0やNULLを使用しますが、 「NULLは単なるマクロなので本来は0を使わなければだめ」という話を聞きました。 つまり、 int *p = 0; が本当の正しいNULLポインタであり、 int *p = NULL; は推奨されていない(?)NULLポインタというようです。 今まであまり疑うことなく、NULLポインタを表すのにNULLを使用していましたが、 上記の内容は本当でしょうか。

  • アドレスとポインタがどうしても理解できない

    C言語を独学しているのですが、どの参考書読んでも、アドレスとポインタの理解ができません。アドレスとポインタを使わなくても別に開発できるのではないかと思います。どなたか、アドレスとポインタを初心者でも分かるように分かりやすく教えて頂けないでしょうか?