標準プログラマーズ ライブラリシリーズC言語 ポインタ完全制覇

[表紙]C言語 ポインタ完全制覇

B5変形判/324ページ

定価(本体2,280円+税)

ISBN 4-7741-1142-2

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

第一線で活躍する筆者によって,C言語において最大の難関と言われる「ポインタ」の真の使い方が見えてきます。もう一歩先へ進めなかった初心者はもちろん,ある程度経験を積んだプログラマにもぜひ読んでほしい画期的な1冊です。

こんな方におすすめ

  • ポインタのところを重点的に学びたい方
  • C言語をもう一度学び直したい方

目次

第0章 本書の狙いと構成 ―イントロダクション

  • 0・1 本書の狙い
  • 0・2 対象読者と構成

第1章 まずは基礎から ―予備知識と復習

  • 1・1 Cはどんな言語なのか
    • 1・1・1 たとえ話
    • 1・1・2 Cの生い立ち
    • 1・1・3 文法上の不備・不統一
    • 1・1・4 ANSI C
    • 1・1・5 Cのバイブル ―K
    • 1・1・6 Cの理念
    • 1・1・7 C言語の本体とは
    • 1・1・8 Cは,スカラしか扱えない言語だった
  • 1・2 ポインタについて
    • 1・2・1 そもそも,悪名高いポインタとは何か
    • 1・2・2 ポインタに触れてみよう
    • 1・2・3 ポインタとアドレスの微妙な関係
    • 1・2・4 ポインタ演算
    • 1・2・5 ヌルポインタとは何か?
    • 1・2・6 実践 ―swap関数
  • 1・3 配列について
    • 1・3・1 配列を使う
    • 1・3・2 配列とポインタの微妙な関係
    • 1・3・3 添字演算子[]は,配列とは無関係だ!
    • 1・3・4 ポインタ演算という妙な機能はなぜある?
    • 1・3・5 ポインタ演算なんか使うのはやめてしまおう
    • 1・3・6 関数の引数として配列を渡す(つもり)
    • 1・3・7 関数の仮引数の宣言の書き方

第2章 実験してみよう ―Cはメモリをどう使うのか

  • 2・1 仮想アドレス
  • 2・2 Cのメモリの使い方
    • 2・2・1 Cにおける変数の種類
    • 2・2・2 アドレスを表示させてみよう
  • 2・3 関数と文字列リテラル
    • 2・3・1 書き込み禁止領域
    • 2・3・2 関数へのポインタ
  • 2・4 静的変数
    • 2・4・1 静的変数とは
    • 2・4・2 分割コンパイルとリンク
  • 2・5 自動変数(スタック)
    • 2・5・1 領域の「使い回し」
    • 2・5・2 関数呼び出しで何が起きるか?
    • 2・5・3 可変長引数
    • 2・5・4 再帰呼び出し
  • 2・6 malloc()による動的な領域確保(ヒープ)
    • 2・6・1 malloc()の基礎
    • 2・6・2 malloc()は「システムコール」か?
    • 2・6・3 malloc()で何が起きるか?
    • 2・6・4 free()した後,その領域はどうなる?
    • 2・6・5 フラグメンテーション
    • 2・6・6 malloc()以外の動的メモリ確保関数
  • 2・7 アラインメント
  • 2・8 バイトオーダー
  • 2・9 言語仕様と実装について ―ごめんなさい,ここまでの内容はかなりウソです

第3章 Cの文法を解き明かす ―結局のところ,どういうことなのか?

  • 3・1 Cの宣言を解読する
    • 3・1・1 英語で読め
    • 3・1・2 Cの宣言を解読する
    • 3・1・3 型名
  • 3・2 Cの型モデル
    • 3・2・1 基本型と派生型
    • 3・2・2 ポインタ型派生
    • 3・2・3 配列型派生
    • 3・2・4 「配列へのポインタ」とは何か?
    • 3・2・5 C言語には,多次元配列は存在しない!
    • 3・2・6 関数型派生
    • 3・2・7 型のサイズを計算する
    • 3・2・8 基本型
    • 3・2・9 構造体と共用体
    • 3・2・10 不完全型
  • 3・3 式
    • 3・3・1 式とデータ型
    • 3・3・2 左辺値とは何か ―変数の2つの顔
    • 3・3・3 配列→ポインタの読み替え
    • 3・3・4 配列とポインタに関係する演算子
    • 3・3・5 多次元配列
  • 3・4 続・Cの宣言を解読する
    • 3・4・1 const修飾子
    • 3・4・2 constをどう使うか? どこまで使えるか?
    • 3・4・3 typedef
  • 3・5 その他
    • 3・5・1 関数の仮引数の宣言
    • 3・5・2 空の[]について
    • 3・5・3 文字列リテラル
    • 3・5・4 関数へのポインタにおける混乱
    • 3・5・5 キャスト
    • 3・5・6 練習 ―複雑な宣言を読んでみよう
  • 3・6 頭に叩き込んでおくべきこと ―配列とポインタは別物だ!
    • 3・6・1 なぜ混乱してしまうのか
    • 3・6・2 式の中では
    • 3・6・3 宣言では

第4章 定石集 ―配列とポインタのよくある使い方

  • 4・1 基本的な使い方
    • 4・1・1 戻り値以外の方法で値を返してもらう
    • 4・1・2 配列を関数の引数として渡す
    • 4・1・3 可変長配列
  • 4・2 組み合わせて使う
    • 4・2・1 可変長配列の配列
    • 4・2・2 可変長配列の可変長配列
    • 4・2・3 コマンド行引数
    • 4・2・4 引数経由でポインタを返してもらう
    • 4・2・5 多次元配列を関数の引数として渡す
    • 4・2・6 配列の可変長配列
    • 4・2・7 変に凝る前に,構造体の使用を考えよう
  • 4・3 反則技
    • 4・3・1 可変長構造体
    • 4・3・2 1から始まる配列

第5章 データ構造 ―ポインタの真の使い方

  • 5・1 ケーススタディ1:単語の出現頻度を考える
    • 5・1・1 例題の仕様について
    • 5・1・2 設計
    • 5・1・3 配列版
    • 5・1・4 連結リスト版
    • 5・1・5 検索機能の追加
    • 5・1・6 その他のデータ構造
  • 5・2 ケーススタディ2:ドローツールのデータ構造
    • 5・2・1 例題の仕様について
    • 5・2・2 各種の図形を表現する
    • 5・2・3 Shape型
    • 5・2・4 検討 ―他の方法は考えられないか?
    • 5・2・5 図形のグルーピング
    • 5・2・6 継承とポリモルフィズムへの道
    • 5・2・7 ポインタの怖さ
    • 5・2・8 で,結局ポインタってのは何なのか?

第6章 その他 ―落ち穂拾い

  • 6・1 落とし穴
    • 6・1・1 strncpy()について
    • 6・1・2 「古い」Cでfloat型の引数を使ったら
    • 6・1・3 printf()とscanf()
    • 6・1・4 プロトタイプ宣言の光と影
  • 6・2 イディオム
    • 6・2・1 構造体宣言
    • 6・2・2 自己参照型構造体
    • 6・2・3 構造体の相互参照
    • 6・2・4 構造体のネスティング
    • 6・2・5 共用体
    • 6・2・6 配列の初期化
    • 6・2・7 charの配列の初期化
    • 6・2・8 charへのポインタの配列の初期化
    • 6・2・9 構造体の初期化
    • 6・2・10 共用体の初期化
    • 6・2・11 グローバル変数の宣言

参考文献

著者プロフィール

前橋和弥(まえばしかずや)

1969年,愛知県生まれ。名古屋市内の某ソフト会社で俸禄を食んでいるプログラマー。著書に『C言語 ポインタ完全制覇』,『C言語 体当たり学習徹底入門』,『Java謎+落とし穴徹底解明』,『センス・オブ・プログラミング!』がある。

言語作りは昔から趣味で細々とやっていた。これがなければCの本を書いたりすることもなかったと思う。

著者ホームページ:http://kmaebashi.com