どうしてポインタを使用するのか
c言語を勉強する人にとって、ポインタというものは万人共通の壁であることはまず間違いないでしょう。
私の通っている大学でもポインタだけテストの点が10点近く下がるという事態になりました。
そんな難しいとされているポインタですが、これを学習しながら少ない人がこう思ったでしょう。
・・・どうしてポインタを使う必要があるのか・・・
(まぁ、私がそうだったので...)
と、言うことでポインタを使うメリットをまとめてみます。
1.効率的!
実は、小規模のプログラムであればポインタを使わずにもコードを書くことはできます。
ですがそれは現実的ではなく、またひどく複雑で無駄の多いコードになります。
(テトリスですら作りたくないですね)
そこでポインタを使用することによって出来るだけ無駄を省いたコードを書くことができるようになります。
(なぜポインタが効率的なのかは主ではコードで例を示さなければ不可能です...sorry.)
2.速い!
普通に考えてプログラムの処理は速いほうがいいでしょう。スマホの起動が遅かったり、Webブラウザの読み込みが遅かったらイライラするでしょう。
ポインタによる表現は低レベル(ハードウェアに近い)なので、コンパイラが容易に機械語に変換することができます。
それでいて負荷はポインタを使う場合と、使わない場合で変わらないという事実もあります。
3.メモリの無駄遣いを防ぐ!
プログラムは計算のためにメモリを使用します。しかしメモリの容量は無限にあるわけではありません。
もしたくさんメモリを使用してメモリの容量が無くなった場合、新しくメモリを使用することはできません。
ポインタを使用することで適切にメモリを管理することができるようになります。
補足
高校時代に言われたことなのですが...
「どうして今になってCなんか勉強してるの?python(メモリ管理を自動でやってくれるプログラミング言語)できるんだからそっち使えばいいじゃん。」
少なからずこのようにC言語を勉強する意味を考えた方もいらっしゃると思います。
他にもJavaなどメモリ管理を自動でやってくれる言語はたくさんあります。(主流の言語のうちC/C++を除けばほとんどそうでしょう。)
ですが、プログラミング言語には向き、不向きというものが有ります。
例えば、自分が興味のあるゲームプログラミングやOSでは出来るだけハードウェアの性能を高めることのできるコードが要求されています。
そのためにはC言語のポインタを使用して強力なチューニングを行う必要が有ります。
ならば、上のような用途でなければC言語を使う意味は無いのかというとそうではありません。
他の言語であれば、
Java: どんなOSでも動く。
など様々な特徴が存在しますが、Javaメインのコードだろうが、Pythonメインだろうがプログラムの基盤部分はC言語で書かれていることがよくあるので、C言語ができる必要があります。
なので、ぜひC言語を勉強している方は諦めずに一緒に頑張っていきましょう。
//ここで述べたポインタのメリットはあくまで一部に過ぎません。