• 締切済み

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

unokwaveの回答

  • unokwave
  • ベストアンサー率58% (966/1654)
回答No.11

アドレッシングレジスタ自体がポインタなのは、CPU内に極小のレジスタしかなく、RAM上のデータを指す必要があるからです。 ポインタという概念がなければデータを番地情報として代わりに持つことができないため、重複するデータを一つにまとめられず、常に実体を持つ必要が出てきます。 例えるなら住民票をバイト先に提出する必要があるときに、バイト先の内部で「連絡先情報」「保険用情報」といった具合に用途毎枚数をバイト君に提出要求するような事になります。 バイトの個人情報はここの引き出しに原本が入っているという、指す情報として扱えませんから。 用意する数が増える事の無駄はコンピュータ内部ではコピー回数の増加になり、メモリーバスのビジー率が上がってパフォーマンスが落ち、RAMの消費率が上がります。 それにしても他に投稿された同様の質問を読む限り、コンピュータの事をあまりにもわかっていないように見受けられます。

関連するQ&A

  • ポインタについて

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

  • 【なぜポインタを使うのか】

    私は、ポインタのメリット・デメリットを以下のように考えています。 ◆メリット メモリを多く確保しなければならないオブジェクトについて、コピー処理を行うことなく省メモリでインタフェースできる。 ◆デメリット ・関数内でしか使用しない非ポインタのローカル変数に比べ、  アクセス可能な場所が多くなってしまい、色んな箇所から値が変更されうる。(影響範囲の限定がしずらい) ・可読性が低くなる。(若いエンジニアはCの経験者は少なくっていくと思われるため、保守コストが若干割高になる) そのため、よっぽどメモリを多く使うようなオブジェクトでなければ、 (もしくは速度を重視する必要があるプログラムでなければ) 値渡しにしても良いのではと考えています。 しかし、度々目にするソースは、何でもかんでもポインタで処理しているものも多々見受けられます。 特に、int型のようなメモリを大量に使用しないものでも、ポインタで変数宣言しているケースもよく見ます。 なぜなのでしょうか? (熟練のC言語プログラマが、昔ながらの記述を踏襲しているというのはあるのかなと考えていますが)

  • ポインタ

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

  • 「ポインタ」とはそんなに素晴らしいものなの?

    どこかの書籍に記載されていたのですが、 >「ポインタ」は魅力があるすばらしいものだ。 上記の一文が掲載されていたのですが、こんな難しい概念。どこが素晴らしいものなんですか? こんなものに絶賛するのは本を執筆した著者だけだと思いますが、どうなんでしょうか? プログラマーの方、感想及び回答のほうお願いします。

  • ポインタのミスでOS壊れるのでしょうか?

    c言語の開発環境VC++を持っていますがポインタの処理で間違いそうで なかなかコードのケアレスミスが怖くてポインタやmallocを含んだコードを実行できないでいるのですが、そもそもポインタやmallocのコードミスでOSが壊れてos再インストールなどに陥るものなのでしょうか?保護違反などが出てきてパソコン再起動なんかが起こるのでしょうか?

  • ポインタの宿題が解けません。

    C言語でポインタを勉強しているのですが、 char型のアドレス:0022FF47 int型のアドレス:0022FF40 が今あるとして、 このアドレスのメモリの中身はどんな状態になっていますでしょうか? visual studioのwatch で見る以外の方法で分かりましたらお願いします。

  • int型のポインタ

    int型のようなメモリを大量に使用しないものでも、ポインタで変数宣言しているのをよく見かけますが、 なぜでしょうか? 私はCに慣れていないため、int型くらいのサイズだったら、なるべくならポインタを使わないで書いてもらった方が可読性が良いので、ポインタにするメリットがあまり感じられません。

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

    現在、C++言語を学習しているのですが、 ポインタを使わない、 int main() { Human human; human.Introduction(); } と、ポインタを使った、 int main() { Human *p; p = new Human; p->Introduction(); delete p; } があります。どちらも同じ動作をしますが、ポインタを使ったものがよく使われているのは、 メモリの節約?動作速度?のためなのでしょうか? なぜ使われるのか教えてください。

  • ポインタはどんな時に使うものなの?

    僕は最近C++の勉強をしている高校生です。 さっそくですが質問です。最近、ポインタを覚えました。 ポインタはメモリの番地を指定できるから低レベル処理に使えると聞きましたが その他ではいったい何に使えるのか想像がつきません。 具体的にどんな処理に使うのでしょうか? お暇があればご回答ください。

  • なぜ「C言語」にOOPが実装されなかったの?

    1972年に開発された「C言語」(C++ではない)には「オブジェクト指向」というのがないのですが、なぜ「C言語」に「オブジェクト指向」というのが実装されなかったのですか? 「オブジェクト指向プログラミング」は1960年代後半に登場していたのですが、後発の「C言語」には「ポインタ」はあっても「オブジェクト指向」というのがありません。なぜ「オブジェクト指向」は実装されなかったのでしょうか? 当時コンピュータの性能が低かったため実装が難しかったことと、まだ当時オブジェクト指向自体が無名だった為、「C言語」の開発者自体も知らなかったということもあるのでしょうか?