• ベストアンサー

ポインターの使用法や利点

C言語でのポインターの使い所、どんな時に使うのか、どんな時に役立つのかを教えてください。

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

  • ベストアンサー
回答No.3

関数で変数を使いますよね。 その変数は関数の持ち物です。 だから、その関数から別の関数にその変数を渡したい時に、その変数自体は渡せません。 自分の物ですから。 仕方が無いので変数のコピーを渡します。 渡した変数は、渡された関数の持ち物です。 変数が荷物だとすると、いちいち荷物の中身を複製して、新しい入れ物を用意して、その入れ物を関数に渡します。 ちょっと面倒ですよね。 ポインタの場合、荷物の中身を複製せずに、ここにあるよという荷札みたいな物だけを渡します。 らくちんですよね。 いろんなことをする時に、荷札だけをやり取りすると楽な場合があります。 メモリ割り当て関数も、どこかに荷物を作って、その荷札だけを渡してくれます。 荷札は簡単に複製できるので、危険はありますが、やり取りが簡単なんです。 簡単にやり取りができないと合理的に使えないアルゴリズムが一杯あります。 それらを使うときにポインタが便利なんです。

その他の回答 (2)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

配列しかないと、一直線のデータしか表現できません。 ポインタがあると、トーナメント表のようなツリー状のデータ表現や 輪っかのように循環したデータ表現をプログラムで扱えます。 そのようなデータを無理矢理配列に当てはめてもプログラムは作れる でしょうが、人が考える時の表現をなるべくそのまま扱う方がプログラム は作り易いですし、間違いが入る余地は少なくなります。

  • selenity
  • ベストアンサー率41% (324/772)
回答No.1

ポインタは、ないと大変困ります。 文字列操作、配列操作の際に実行時に動的に必要な 分だけメモリを確保するため、メモリの使用量は 少なくてすむ場合があります。 デメリットとしては、動的に確保したメモリは 必ず開放する必要があります。

関連するQ&A

  • 関数ポインタの利点

    こんにちは。 C言語初心者ですが今勉強中です。 その中でポインタについては理解できたのですが、 関数ポインタの利点、使うべき所などが理解できません。 ポインタの基本は理解しています。 値渡し、アドレス渡しも理解しています。 関数ポインタを使うと何がいい、またはどんなとき使わなければならないのか 教本を読んでいてもさっぱりわかりません。 サンプルプログラムを打っても何のために使ってるのかわからないです。 どなたか教えていただけませんでしょうか? よろしくお願いします。

  • C言語のポインタの利点がわかりません

    C言語を始めたばかりですが、 ポインタで間接参照するメリットが今一つわかりません。。。 特に、関数ポインタを使う場合には、 単なる関数ではだめなのでしょうか。 どなたか、かみ砕いて教えていただけないでしょうか。

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

  • ポインタ

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

  • ポインタについてアドバイスお願いします。

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

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

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

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

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

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

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