ポインタ虎の巻

初級篇〜ポインタはなぜ難しいか?

C言語を学ぶ上で、ほとんどの人が引っかかり、往々にCの勉強を放棄するきっかけとなるのがポインタである。しかし、ポインタはC言語という特定のプログラム言語だけではなく、コンピュータというものを理解する上で、必要不可欠な重要な機能である。C言語参考書では、ポインタを解説する上で「箱」のモデルを使って解説することが多いが、この虎の巻では、より突っ込んだ具体的な動作を解説することでポインタというものの本質を解明して見ようと思う。参考書ではC言語の抽象レベルの上で解説がされるのが通例だが、虎の巻では単純化されたアセンブリ命令を使って具体的に解説する。

初級篇目次

  1. 変数とは何か?
  2. 疑似アセンブリの定義
  3. 文字列の処理
  4. アドレスの取得
  5. ポインタの型
  6. 関数呼び出しの手法
  7. 構造体とポインタ
  8. リスト構造 NEW
  9. 二進木 NEW

中級篇〜ポインタの高度な技

ポインタにはまだ更に高度な技がある。比較的トリッキーではない言語であるC言語で、トリッキーな技があるのはポインタ関連とマクロの技である。とりあえず、中級編の内容を軽く見出しにしておこう。

中級編では、ポインタの更に進んだ使い方を解説して行く。実質的には「配列」、「文字列」というオブジェクトとの関連と、それらとの合わせ技の解説が主となる。これらはC言語の常套的な表現の基礎となる部分であり、通常のアプリケーション・プログラムでも頻繁に使われる。だからこれらを正確に理解することなしに、コピーフリーで出回っている「有名な」ソースコードを解読することはできない。

第1・2章は実質的には初級編に対する補足説明である。これは正しくポインタを使えるようになるまで、実質的に理解不能であるから中級編に回した。

第3・4章は科学計算でよく使われる多次元配列の解説である。C言語では厳格な意味での多次元配列を実現していない。しかし、それと良く似たもので「ディスプレイ」と呼ばれる構造を、多次元配列として使う方法がある。それを解説すると同時に、コマンドラインからプログラム引数を受け取る標準的な手段である argc, argv システムの解説を行う。

第5章はポインタの醍醐味を存分に味わうことのできる、malloc()によるメモリの確保と確保されたメモリの使用法である。これは応用編としてはもっとも重要であり、これがちゃんと使えなくてはC言語を使う意味はない。

第6章は任意の定義された関数自体をポインタとして使う方法である。トリッキーな技として使われることもあるが、ウィンドウ・プログラムではコールバック関数などで実は頻繁に使われる技でもある。

最後の第7章は今まで説明して来なかった「自動変数」の説明である。自動変数は確保のされ方がグローバル変数とは異なる。これを解説するためにはスタックという超重要なデータ構造の理解が不可欠である。

中級篇目次

  1. 初期化文字列の2つの定義
  2. extern宣言の罠--配列とポインタの違い
  3. 多次元配列の実現 大幅加筆
  4. ダブルポインター **argv の使い方
  5. malloc() されたポインタの使い方 大幅加筆
  6. 関数ポインタの使い方
  7. スタックと自動変数


copyright by K.Sugiura, 1996-2006