- 締切済み
「ポインタ」とはそんなに素晴らしいものなの?
どこかの書籍に記載されていたのですが、 >「ポインタ」は魅力があるすばらしいものだ。 上記の一文が掲載されていたのですが、こんな難しい概念。どこが素晴らしいものなんですか? こんなものに絶賛するのは本を執筆した著者だけだと思いますが、どうなんでしょうか? プログラマーの方、感想及び回答のほうお願いします。
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- f272
- ベストアンサー率46% (8477/18147)
レーザポインタとかマウスポインタの話かと思ったら,メモリ空間上の位置を指すポインタのことですね。 プログラムはメモリ空間上でいろいろな作業をするわけで,そのメモリ空間の特定の場所に名前(変数名)を付けてアクセスするわけです。でもメモリ空間の特定の場所ではなくて可変の場所を指すような変数があった方が便利なことは確かでしょう。魅力があるすばらしいかどうかは知りませんが。 たとえて言うならば,本棚で本の位置を示すときに 上から3段絵目で左から5冊目というのが,メモリアドレスを直接に使う方法 本Aの右側4冊目というのが,配列を使う方法 本Bのところというのが,変数名を使う方法 指でここと言いながら本の位置を指すのが,ポインタを使う方法
間違えた。Tiny BASICには@nnの配列がありました。とすると配列を使ってポインタを自作出来ない言語は無い?ということになりますか。すみません。
ファストインファストアウトFIFOとは、渡す側と受け取る側のタイミングの違いを緩衝する仕掛けです。 メモリー1、メモリー2、メモリー3、メモリー4、メモリー5 と5つのメモリーがあり、情報を渡す側は、情報を若い順に空いているメモリーに情報を保管する。受け取る側は、常にメモリー1から情報を受け取り、情報を一つ受け取るごとに、 メモリー1←メモリー2 メモリー2←メモリー3 メモリー3←メモリー4 メモリー4←メモリー5 メモリー5←空き と内容をずらします。FIFOは受信したデータを取りこぼしなく処理するために必要な仕組みです。これが無ければ受け取る側は常に渡す側のデータを待っていなければならず、受け取る側が他の処理で忙しいときに発生したデータは取りこぼされることになる。FIFOの段数は5とは限らず、256も1024も必要な場合があります。このままではデータを前にずらすだけでも処理が大変でしょう。 写真のようなリングバッファでFIFOを実現すれば、大量のデータを前にずらす必要が無い。ポインタとは視点の移動です。正しく視点を移動すれば、処理する対象が変わってもプログラムはそれを意識せず同じ動作の繰り返しで全体を処理することができる。 初期値として、 次に入れるポインタ=1 次に取り出すポインタ=1 祐光数変数=0 とします。 データを渡すプログラムは、 有効数変数が5の場合、待つ。 有効数変数が5未満の場合、 次に入れるポインタが指すメモリーに情報を入れる。 次に入れるポインタが5未満の場合1を加える。5の場合1とする。 有効数変数に1を加える。 データを受け取るプログラムは、 有効数変数が0の場合、受け取れるデータはない。 有効数変数が0より大きい場合、 次に取り出すポインタから情報を受け取る。 次に取り出すポインタが5未満の時1を加える。5の場合1とする。 有効数変数を1減じる。 このようにデータを渡す側と受け取る側のプログラムがポインタを使って視線を動かすだけで、一度格納したデータを移動することなく冒頭のFIFOと等しい機能を実現できます。 これはポインタのありがたさの一例にすぎません。タスクごとにデータ用のスタックポインタの内容を切り替えてデータ受け渡しにポインタだけを使う規則にしておけば、すべてのタスクから一つのサブルーチンを読みだしてすべて正常に処理できるというアクロバットすら可能です。 ただ、ポインタとはプログラムの最初に触れるありきたりの機能なので、そのありがたみを毎日体感するには、おかあさんのありがたみを知覚するほどの感性が必要です。今日から配列とポインタが無いTiny BASICだけで仕事しろと言われたら、ご禁制のポインタ様を隠れて信仰する人も増えるでしょう。
- bardfish
- ベストアンサー率28% (5029/17766)
>こんなものに絶賛するのは本を執筆した著者だけだと思いますが ぃぇぃぇ、そんなことはないですよ。 絶賛するほどではないですが、C++を使っている人なら普通にありがたく使ってます。 個人的にはx86の複雑怪奇なアドレッシングテクノロジーに起因しているのではないかと思ってますwww そのへんを知らないとポインターはただ面倒くさくて複雑なものにしか見えないのかもしれませんね。 i8086から始まる16bit CPUでは640KBの壁を超えるためにページングとかエンハンスドモードとかCPUレベルで複雑なことをしていましたからね。
- sknbsknb2
- ベストアンサー率38% (1158/3033)
概念が難しいかどうかと、素晴らしいかどうかということは特に関係ないような気もしますが、ポインタは便利だと思います。 物理的なメモリ空間というのがイメージできなければ難しいかもなので、最初にそれを把握しておけば、特に難しい概念ではありません。
慣れるまで誰もがその必要性を疑問に思い、誰もが嫌うものですが、慣れたらそれはそれで便利なものです この判断は慣れるまでお待ちください
- maiko04
- ベストアンサー率17% (345/1956)
C言語で言えばポインターを使えば ・データの移動なしにソートができる。 ・可変長データがメモリーの無駄なく使える。もちろんソートもできる。 大学の文系・理系と同じような感覚で、 事務系(cobolなど)が理解できる人と Cのようなポインターなどが理解できる人は違うようです。 私もポインターはよくわかりません。