ポインタ演算について

例によって社内研修用のネタ。覚え書きとして。

ポインタの概念はほとんどの、高級言語で実装されている。しかしポインタに整数を加減算したり、ポインタ同士の差をとることができる高級言語を、筆者はC/C++(一応C#も)以外には知らない。


ポインタ演算は、配列をポインタに後退させることで、コンパイラが小さくて早いコードを生成できるようにした工夫だと思われる。一昔前のコンピュータでは、実数がハードウェア上で扱えないのが普通であった。ポインタは値だけを見れば、アドレスを表しているだけで、実質整数と同じように扱える。ポインタが指している型のサイズで、加減算がスケールされれば、隣の要素に順にアクセスするのに都合がよい。その他、intよりも小さな型は式の中では、すべて整数に格上げされていた。結果、コンパイラが扱う型はintのみとなり、プログラムサイズを小さくしたり、高速化は容易になった。


マシン語を扱っていたかつてのプログラマにとっては、このような概念を理解するのは容易であり、ポインタ演算は非常に便利だと思っていたのではないか。逆にマシン語を知らない現代のプログラマにとって、ポインタ演算は何のために使うのかよくわからない機能となっているだろう。現在ではCPUパワーも上がり、コンパイラの最適化技術も十分に高まっている。ポインタ演算を使うより、その書き換えである[]演算子を使ったコードを書くようにする方がよいと思う。