みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

C言語には「ポインタ」という概念がありますが、そもそもなぜ「ポインタ」という概念が生まれたのですか?

「ポインタ」という概念が生まれた背景は何なんでしょうか?

当時、メモリの性能が貧弱だった為、それを有効に活用する為に生まれたのでしょうか?

それに、「ポインタ」という概念がないとどうなるのでしょうか?

回答のほうよろしくお願いします。

投稿日時 - 2019-06-21 20:12:21

QNo.9627892

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(11)

ANo.11

アドレッシングレジスタ自体がポインタなのは、CPU内に極小のレジスタしかなく、RAM上のデータを指す必要があるからです。

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

それにしても他に投稿された同様の質問を読む限り、コンピュータの事をあまりにもわかっていないように見受けられます。

投稿日時 - 2019-06-23 10:21:19

ANo.10

CPUが持つアドレッシングレジスタ自体がポインタだからです。

投稿日時 - 2019-06-22 19:27:07

ANo.9

ポインタの機能は住所のGPS座標と同じです。場所を管理する最も単純な方法です。
GPS座標では直感で地域が判りにくいですが、住所情報で飛行計画を作るのも判りにくいです。
速度はアルゴリズム次第だと思います。
ポインタを使わないメモリーアクセスの方が一般的です。

投稿日時 - 2019-06-22 12:36:12

ANo.8

C言語を高級言語だと思うと「ポインタの概念が生まれた」とか勘違いします。
C言語は「高級マクロアセンブラ」です。
インデックスの間接参照はアセンブラでは普通に使う方法です。
アセンブラを理解しているとC言語の便利さに感激しますよ。

投稿日時 - 2019-06-22 07:59:00

ANo.7

アセンブラをやってるとわかりますが
メモリーの物理番地を入れるところです
これにより相対的にメモリアクセスができます

http://www9.plala.or.jp/sgwr-t/c/sec10-2.html

投稿日時 - 2019-06-22 01:12:31

ANo.6

語弊がある気もしますが、ざっくり説明で。

まず、メモリがあります。
メモリも区画に分かれて、データを入れておきます。
その番地がポインタです。

しかし、ポインタの番地を指定して、データを入れるのは、わかりにくいです。
なので、変数というものが、作られました。
ということではないのかね?

番地指定じゃわかりづらいから、分かりやすいラベルを付けよう!って、発想な気がするなー。

投稿日時 - 2019-06-21 22:43:17

ANo.5

もともとは、アセンブラ(マシン語)での概念です。
演算、代入、参照、ポインタ、値、配列、添え字、文字型、整数型、浮動小数点型、などなど。

アセンブラで出来ていたことをCでも出来るようにしようとすると、ポインタが必要です。
ポインタが明示的にない言語でも、ポインタの概念がないと理解できないことが多いです。

投稿日時 - 2019-06-21 21:55:35

ANo.4

そんなにポインタが難しいですか?

これが難しいといっていれば、Cは無理かと思いますが。
ストラクチャや、ストラクトタグなんて、壊滅的じゃないでしょうか。

そもそも、ポインタの概念なんか、CPUの基本動作のところから使われているものなのだから、ソフトウエアを組む人なら、当然のように理解しているものだと思いますけどね。

ポインタがないとどうなるのか?より、ポインタがどのように使われているのか?を理解されたほうが早いと思いますよ。

投稿日時 - 2019-06-21 20:57:35

ANo.3

ポインタが必要だったからです。
C言語は一般的な高級言語と違い、組み込み用途にも使える言語です。
それが何故出来るのかといえば、メモリー空間に直アドレスでアクセス出来るからです。
CPUによっては、メモリとI/Oのアドレス空間が同じものがあります。この場合、I/Oを使用するためには、ポインター変数の存在が必須になります。

ところでポインタって「概念」ですか?

投稿日時 - 2019-06-21 20:45:44

ANo.2

概念というより、技術ですね。「関数」を作る上での。

プログラミング言語は数多ありますが、変数とそのスコープ(使用可能範囲)というものは、特にその言語を特徴づけるものです。C言語は、当時マイクロソフトのBASICなどがほとんどスコープらしい概念がないところ、特に厳格なスコープが決められていて、多くのパソコンプログラマに評価されてました。その一方で、関数の引数には値しか渡せず、変数を渡すことが出来なかったわけです。
で、変数を渡すのではなく、変数の在処を示す値(ポインタ)を渡すことで、変数の中身を操作するという技術が編み出され、実装されていたわけです。

ですから、ポインタがなかったら、関数はすべて戻り値で処理するしかなくて、えらいことになったですよ。

今の、参照渡しアタリマエの若い方にはわからんかもしれんですが、ポインタ渡しはその原型で、むしろ基本なんです。まぁ、年寄りの昔話ということで。

投稿日時 - 2019-06-21 20:38:40

ANo.1

むしろポインタだけだったのを、変数という概念を入れてきたのではないでしょうか

投稿日時 - 2019-06-21 20:24:25

あなたにオススメの質問