• 締切済み

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

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

みんなの回答

回答No.4

C言語がポインタを多用するのは、歴史的な慣習みたいなもんです。 本来、C言語は高級コンパイラとはいえ、簡易的に開発された言語で、そのため文法を少なくするため、 ポインタを多用したと考えられます。 ポインタを多用する言語として某メーカのALGOL言語があります(メーカ独自の方言とも思われる)。 この言語は、特殊なアーキテクチャをもつCPUのために開発されたもので、初心者にはかなり使いづらいものです。 このCPUは過去の用語法で言えば、いわゆるワードマシンで、1ワードが48ビットで構成されています。 アドレスはワードごとに付加されているので、このままでは、ワードの真ん中をアクセスするのが煩雑ということで ポインターの使用が発達したということだそうです。 歴史的経緯というのはITの世界でも存在するということです。 ちなみ、IT教育でC言語が幅を効かせているのも歴史的経緯です。 大型機の開発現場では、COBOLが優勢ですし、 教育では、C言語よりPASCALの方が良いと思ってます。 プロのプログラマを育てるにはC言語はふさわしくないと思ってます(私見です)。

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

今はコンビニで公共料金の支払もチケット購入もできるでしょう? それはコンビニがそれぞれとの中継処理をしているからです。 でもコンビニは世界中のすべてのチケットを買えるわけでもなければすべての支払代行ができるわけでもありません。 それは逆にそれぞれの権利者との契約を伴う代行行為である必要があるからです。 この代行処理をプログラムで書く場合、if文やswitch case文で書くか、関数ポインタで個々の関数に丸投げするかを選べます。 if文やswitch case文の場合、分岐が数個なら見通しは悪くないでしょう。 でも分岐が千や万の単位で存在するならどうでしょう。 関数ポインタはどの関数を使うかを一度判断すればそのポインタを使い回せますが、単なる関数分岐では同じ条件判定であっても分岐の度に条件判定が必要になります。 それは処理速度としても、ソースコードのメンテナンス性という点でも劣ります。

  • Nobu-W
  • ベストアンサー率39% (725/1832)
回答No.2

利点・・・>< 書くと長くなりそうなんで (^_^;) http://www.ics.kagoshima-u.ac.jp/edu/gengo0/p10_old.html 読んでみてください m(_ _)m  かなり・・・噛み砕いて説明されてると、私が思うサイトですっ (^_^;)

参考URL:
http://www.ics.kagoshima-u.ac.jp/edu/gengo0/p10_old.html
  • maiko04
  • ベストアンサー率17% (345/1956)
回答No.1

いろいろな長さの文字列を入れ替える際(ソートなど)は ポインターの入れ替えをすれば終わりますね。