ろぐれこーど

限界組み込みエンジニアの学習記録とちょっぴりポエム

初心者から脱したいなら「C言語 ポインタ完全制覇」

新卒のとき、派遣で来てた人の机の上に下の本がありました。

その時はひよっこ中のひよっこだったので「なんか難しそうな本だな」と思ってスルーしてましたが、この度理解を深めるために読んでみました。一言で言えば「もっと早く読んどけばよかった」です。C言語を扱う脱初心者したい人はかなり参考になる部分があるかと思います。

著者

前橋和弥氏が執筆されています。名古屋市ソフト会社で働いているようです。他にもCやJavaなどについての多数の著書があります。この本のコラムなどからもなんとなく感じ取れますが、各言語の言語仕様やアルゴリズム・データ構造についての造詣が深い方だと思います。

概要

かなり色々なことが書いてありますが、メインはやはりポインタに関する説明です。説明されているトピックの中で、特に以下は学びになりました。

  • ポインタと配列について
    • 配列は式中ではポインタに読み替えられる
    • 添字演算子[]の意味
  • スタックについて
  • Cの文法
    • 複雑な宣言・型の読み方
    • 「配列の配列」による多次元配列の実現
    • 値渡しと参照渡しの違い(Cには値渡ししかない)
  • 実用的な使い方(定石)
    • 動的配列、可変長構造体の利用
    • 連結リスト、木構造などデータ構造の実現
    • スコープを意識した実装
    • ヒープ利用時のデータ構造の選択

個々の詳細についてはここでは説明しきれませんが、上記の内容についての知見は得られます。

すでに発売されてから時間が経ち、かなり有名な本なのでネット上に関連記事も豊富にあります。例えば「ポインタと配列の読み替え」については、以下の記事で述べられている内容が参考になります。

ポインタと配列の微妙な関係 - めもめも

「複雑な宣言の読み方」に関しては、以下記事がそのまんま書かれている感じです。

やり直しC言語:複雑な宣言の読み方: Architect Note

最初読んだ時は「そんな複雑な宣言、普通書かねえよ!」という感想が真っ先に浮かびましたが、理解できるようになると結構スッキリします。これらの内容に興味を持てるなら買って損はないでしょう。

またスタックとかアドレスの使われ方を理解すると、以下記事の現象の原因と解決策を提示できるようになります。

[C言語]スペースを大量に入れるとバグが直るコードを書いてみた | 右や左の旦那様

こういうのがデバッグできるようになると、成長の実感が湧きますね。

感想

内容的には非常に濃いので、繰り返し読んで理解を深めていくのが良いかなと思います(アウトプット用に記事を書こうとしたもののボリューム多すぎて放棄した)。ただし、標準入出力や文字列操作に関するライブラリとかは知っている前提で説明される箇所もあるので注意が必要です。自分は業務では標準入出力とかほぼ使わないので、読み解くのに少してこずりました。

ぶっちゃけポインタと配列の違いとか理解しなくても「動いて仕様を満たすコード」は書けると思いますが(そして設計よりプロセスを重視するような現場ではそういった人の方が多いわけですが)、C言語を使うソフト開発者としては知っておくべき事柄が満載です。常に好奇心を持って開発したいものですね。