C 言語ポインタ完全制覇
シー ゲンゴ ポインタ カンゼン セイハ
- 著者:
- 前橋和弥(マエバシ, カズヤ)
- 出版社:
- 技術評論社
- 出版日:
- 2017年12月
- ISBN:
- 9784774193816
- シリーズ:
- 新・標準プログラマーズライブラリ
- 在庫:
- 在庫あり
なぜ注目されているか
書籍紹介
C はなんでこんな言語に「なっちゃった」のか。そもそもこの悪名高いポインタとは何か。初心者が必ずひっかかる、配列とポインタのまぎらわしい文法とは。C はメモリを実際にどんなふうに使うのか。C の宣言は英語で読め。ポインタの真の使い方は。C の文法を深く知ることで見えてくること納得できること。
技書の森解説
『C 言語ポインタ完全制覇』 (前橋和弥 著、技術評論社、2017 年 12 月刊) は、C 言語のポインターと、それを取り巻く宣言の文法を正面から解き明かす解説書です。叢書は新 / 標準プログラマーズライブラリで、2001 年に刊行された同名書の改訂版にあたります。版元は勧めたい読者として、C 言語のポインターでつまずいた人や実は理解が曖昧な人、C 言語の自習者や再入門者を挙げています。ポインターの書き方は覚えたのに、なぜそう書くのかを説明できずにいる人に向いた一冊です。
2001 年刊からの改訂、C99 と C11 と 64 ビット環境への対応
版元の概要によれば、新版では ISO-C99 と C11 での扱いを追加し、64 ビットの OS を想定して全面的に内容を見直し、加筆と修正を加えています。目次にもその改訂が表れており、第 1 章では C の生い立ちから ANSI C (C89/90)、C95、C99、C11 までの規格の流れをたどります。可変長配列 (VLA)、フレキシブル配列メンバ、要素指示子付きの初期化、複合リテラルといった C99 の機能や、C11 の無名構造体と共用体を扱う項目も目次に並んでいます。
宣言を英語で読み、配列とポインターを分けて考える全 7 章
構成は第 0 章から第 6 章までの 7 章です。第 0 章で本書の狙いと対象読者を示し、第 1 章でメモリとアドレス、ポインター、配列の基礎を復習します。第 2 章「実験してみよう―C はメモリをどう使うのか」は、仮想アドレス、静的変数、自動変数 (スタック)、malloc () による動的な領域確保 (ヒープ)、アラインメント、バイトオーダーを確かめる章です。第 3 章「C の文法を解き明かす―結局のところ、どういうことなのか?」では、宣言を英語で読むという解読法、基本型と派生型からなる C の型モデル、左辺値、配列からポインターへの読み替え、const と typedef、関数へのポインターにおける混乱までを取り上げ、章の終わりの 3-6 節に「頭に叩き込んでおくべきこと―配列とポインタは別物だ!!」を置いています。第 4 章は配列とポインターのよくある使い方を集めた定石集、第 5 章は単語の使用頻度を数えるプログラムとドローツールのデータ構造という 2 つのケーススタディでポインターの真の使い方を示し、第 6 章は新しい関数群や落とし穴、イディオムを拾い集める章です。
C のポインターが難しく見える理由とメモリの見取り図
C 言語 のポインターがつまずきの種になりやすいのは、概念そのものより表記の側に原因があります。宣言に現れる `*` と式の中の `*` は同じ記号でありながら役割が違い、配列の名前は式の中ではほとんどの場合に先頭要素へのポインターへ読み替えられるため、配列とポインターが同じものに見えてしまいます。さらに宣言は変数名を中心に右と左へ読み進める構造になっていて、配列へのポインターや関数へのポインターが絡むと、型を左から順に読むだけでは意味が取れなくなります。
メモリ管理の責任も読み手にのしかかります。ガベージコレクション を備える言語では使わなくなった領域の解放をランタイムが引き受けますが、C ではプログラマー自身が malloc () で確保した領域の寿命を管理し、ポインターの指す先がまだ有効かどうかを把握し続けなければなりません。プログラムの記憶領域がコード、静的なデータ、スタック、ヒープに分かれる メモリレイアウト を具体的に思い描けると、ポインターの値がどこを指しているのか、関数から戻った後に使ってはいけない領域がどれなのかを判断しやすくなります。組み込み機器や OS、C で書かれた既存のライブラリに触れる仕事では、この判断が不具合の調査に直結します。
前提になるのは C の基本文法です。版元が自習者と再入門者を対象に挙げているとおり、プログラミングそのものを初めて学ぶための入門書ではありません。扱う規格は目次のとおり C11 までで、C++ のクラスやテンプレートを学びたい人の目的とも異なります。ポインターを使ったコードを写して動かせはしても、配列へのポインターや関数へのポインターが出てくるたびに手が止まる人、C で書かれたコードを読み解く必要がある人にとって、宣言の読み方と型の仕組みから配列とポインターの違いを整理し直せる本書は、あいまいだった理解を作り直す確かな足場になります。
言及した記事 (9 件)
【初心者向け】ポインタはなぜ難しいか(ポインタのちょっとしたコツ)
♡ 97Cどうすれば良いプログラムが書けるようになるのか?
♡ 10Python, 新人プログラマ応援ポインタの * ってなんぞ?
♡ 4C, ポインタT *a[n] はなぜポインタ配列なのか
♡ 2CC言語学習記録
♡ 1C, 初心者, #学習記録constとtypedefについての学習メモ #C
♡ 0C, 初心者, 学習記録C言語の式(Expression)について
♡ 0C, 初心者, #学習記録C言語の型についての学習
♡ 0C, 初心者, 備忘録, #学習記録Valgrind によるメモリリークチェックのメモ
♡ 0malloc, メモ, 初心者, valgrind
この本に興味がある方におすすめ
関連する本
関連記事
技術書の読書ログを GitHub で管理する - エンジニアらしい記録法
技術書の読書記録を GitHub リポジトリで管理する方法を紹介します。Markdown で読書ノートを書き、コミット履歴で読書の軌跡を残す、エンジニアならではの読書ログ術です。
読書メモは未来の自分への手紙である
技術書を読んだときのメモは、数ヶ月後 / 数年後の自分が読み返して助かる贈り物になります。「あのとき何を考えていたか」を残す読書メモの書き方と、長期的な活用法を紹介します。
技術書の読書メモ術 - 読んだ内容を確実に定着させる記録法
技術書の内容を定着させる 3 行メモ法と、ツール選び、メモを実務に活かす仕組みを紹介します。