PR:この記事にはアフィリエイトリンクが含まれます。
C言語のポインタやメモリ管理に差しかかると、記号と用語が一気に増えて戸惑いますよね。まず分けて考えたいのはアドレスと値、メモリの寿命、解放する責任です。この三点を整理すれば、組込み開発で使う知識も見通せます。
ここでは、イラストで入口を作る本から、ポインタの仕組みやマイコンの制約を扱う本まで紹介します。四冊の内容をたどり、読み終えたあとにどんなコードを書けるのかを見ていきましょう。
4冊の全体像
四冊の対象読者と扱う範囲はかなり違います。配列とポインタを絵で学ぶ本があれば、mallocとfreeや実機題材に進む本もあります。
| 本 | 中心テーマ | 向く読者 | 参考価格 |
|---|---|---|---|
Cの絵本 第2版 C言語が好きになる新しい9つの扉 | イラストで配列とポインタ | C言語が初めての人 | 1,518円(税込) |
新・標準プログラマーズライブラリ C言語 ポインタ完全制覇 | 宣言、mallocとfree、メモリ配置 | ポインタを学び直す人 | 2,728円(税込) |
組込み1年生のための プログラミングの教科書 | ポインタ、メモリ操作、マイコン | 組込み開発を始める人 | 3,300円(税込) |
新・明解C言語 中級編 第2版 | 文字列、ポインタ、動的記憶域 | 入門を終えた人 | 2,750円(税込) |
表の価格は公式希望小売価格(税込)を目安にしました。実売価格は時期や販売店で変わるため、購入時には各店で確認してください。価格差より、知りたいテーマが本文に含まれているかを確かめるのが判断の軸です。
四冊の内容は、C入門、ポインタの掘り下げ、組込み実務、中級の例題演習に分かれます。今ほしい知識から読み始めれば、内容の重なりも抑えやすいでしょう。
ポインタの正体
変数はメモリ上の区画に置かれ、ポインタはその番地を記録します。番地をたどって中身を読む操作が間接参照です。住所と値は別物。この区別が出発点になります。
たとえば int value = 7; int *p = &value; では、pがvalueのアドレスを持ちます。*p = 9;と書くと同じ区画の値が9に変わり、別の変数を経由して更新できるわけです。
ポインタには指し示す先の型があります。 int *を加算すれば、一般には次のint要素の位置へ進みます。番地の数字を1増やす感覚とは違いますよね。型と配列をセットで考えるのが基本です。
気をつけたいのは、ポインタにアドレスを入れただけでは、その場所が有効とは限らないこと。初期化前の値や寿命が終わった変数へのアクセスは未定義動作につながります。危険な入口になりやすい部分です。
配列と文字列
配列は同じ型の値を連続した領域に並べる仕組みです。a[i]の添字は0から始まるので、要素数が5なら使える範囲は0〜4。最後の次を読む一回のずれが、破損や予測できない挙動を招きます。
配列名は多くの式で先頭要素へのポインタに変換されます。配列そのものとポインタ変数は別物です。sizeof aで配列全体のバイト数を取れても、関数の引数として受け取ったポインタから要素数は分かりません。
文字列も配列の一種で、末尾の'\0'が終わりを示します。1文字1バイトのデータを10個入れるなら、終端文字を含めて11バイトが必要です。固定長バッファでは容量の見積もりが安全性を左右します。
関数へ配列を渡すときはポインタと要素数を別々に渡す形が基本です。受け手が長さを知らなければ境界を検査できず、コピーや文字列処理で脆弱なコードになりがち。ここは押さえておきたいですね。
確保と解放
ローカル変数の多くはブロックを抜けると使えなくなります。mallocで確保した領域は、freeするまで残ります。動的メモリでは確保した側が解放まで管理します。
確保サイズは固定値にせず、p = malloc(count * sizeof *p);と書くと型を変えてもサイズが対応します。戻り値がNULLでないかを確かめ、countの範囲もあらかじめ制限するのが実務的です。
確保した領域を解放し忘れればメモリリーク。反対に二重解放や解放後の参照は、壊れた値を読み書きする危険があります。解放後にポインタをNULLにする慣習も、事故を減らす助けになります。
確保を繰り返すと空き領域が細かく分かれ、大きな連続領域を取れなくなる場合があります。長く動く製品では総使用量に加え、確保の回数やタイミングも設計対象です。
組込みの制約
組込み機器では使えるRAMやスタックがPCより小さい場合がよくあります。巨大な配列をローカルに置くとスタックを圧迫し、深い再帰では最大使用量を見積もりにくくなります。
起動後の動作を読みやすくするには、必要量が決まった配列や静的領域を使う設計も候補です。ただし固定領域もRAMを占めます。通信バッファや画面領域など、用途ごとの容量を足し上げてください。
ヒープを使う場合は、確保に失敗したときの動作や最大量、解放までの経路を先に決めます。割り込み中や周期制御のたびに確保すると、処理時間の揺れや断片化が問題になりやすいところがあります。
周辺機器のレジスタが特別な番地に置かれる場合、一般のデータと同じ読み書きでは足りません。マイコンのヘッダーや仕様を確認し、必要なvolatile指定とアクセス幅を守ります。実機開発で欠かせない注意点です。
本ごとの中身
『Cの絵本 第2版 C言語が好きになる新しい9つの扉』は208ページです。プログラミング言語が初めての人を対象に、イラストを使って簡潔に解説します。配列とポインタは第4章で登場し、専門書へ進む前の入口になります。
参考価格は1,518円(税込)。ポインタの関係を図で確かめたい人や、Cの用語に不慣れな人に勧めやすい本です。mallocとfreeを使うメモリ管理を深く学ぶ場合は、別の本も必要になります。
『新・標準プログラマーズライブラリ C言語 ポインタ完全制覇』は368ページ。C99とC11の扱いを加えた改訂版で、ポインタ宣言や配列に加えて、アラインメントやバイトオーダーまで取り上げます。
mallocとfree、断片化、動的配列、データ構造のケーススタディも扱います。宣言の読み方を整理し、設計上の課題まで追える構成です。参考価格は2,728円(税込)。ポインタを重点的に学び直す人には、この本をおすすめします。
『組込み1年生のための プログラミングの教科書』は2025年4月発行、248ページ。PIC、Raspberry Pi Pico、Arduino UNOを題材に、ポインタやmallocとfree、メモリリークを扱います。低負荷化やデバッグも組込みの制約と結びつけて学べます。参考価格は3,300円(税込)。
『新・明解C言語 中級編 第2版』は384ページ。111編のプログラム例と152点の図表を収録し、文字列とポインタ、動的記憶域の確保と解放を例題で深めます。参考価格は2,750円(税込)。入門後に実践力を伸ばす本です。
現場の誤り
バッファの範囲外アクセスは、要素数がnなのに添字nへ書くと起きます。容量の計算と書き込み位置を順に照合すれば、範囲を外れた箇所を見つけやすくなります。
関数からローカル変数のアドレスを返すのも誤りです。関数が終われば変数の寿命も尽きます。ポインタの値が残っていても安全とは限りません。データを誰が持つか、受け渡す段階で考えておきましょう。
確保と解放が関数をまたぐと対応関係を見失いがちです。誰が確保し、誰が解放するかをコメントや関数名で明確にすれば、リークや二重解放の調査がしやすくなります。長く動く機器では小さな漏れも積もります。
組込みでは、割り込みとメイン処理が同じバッファを触る競合も起きます。ポインタが正しくても更新順序が崩れればデータは壊れます。排他制御やリングバッファの約束も含めてメモリを考えます。
結論
図解からC言語に入る人には『Cの絵本』をおすすめします。ポインタ宣言や配列、mallocとfreeを根本から整理したい人には『ポインタ完全制覇』が合います。今知りたい内容に合わせると、次の一冊を決めやすくなります。
限られた資源や実機題材に関心がある人には『組込み1年生』をすすめます。基礎を終えて例題をたくさん追いたい人は『新・明解C言語 中級編』を選ぶとよいでしょう。どちらもポインタとメモリを実コードの流れに沿って見直せます。
初学者は短いコードでアドレス、要素数、変数の寿命を書き出すと理解が進みます。本の題材を手元のC環境で動かせば、仕組みと不具合が結びついて見えてきます。組込みを目指すなら、実機のRAM上限まで意識する一冊へ進む価値があります。
Amazon の PC をスコア化してみた
Amazonにある8〜14インチの小型WindowsタブレットやノートPCを、スペック別にスコア化して比較・ランキング。





