新しいC言語の教科書

廃版

この本は、もう販売しておりません。

新しいC言語の教科書

本書について

[目次]

  • はじめに
  • 第1章 準備
  • 第2章 C言語プログラムの基本
  • 第3章 変数や定数と型
  • 第4章 式と型変換
  • 第5章 基本的な演算子
  • 第6章 制御構造
  • 第7章 関数とプログラム
  • 第8章 前処理
  • 第9章 配列とポインタ
  • 第10章 関数とポインタ
  • 第11章 動的記憶域確保
  • 第12章 文字と文字列
  • 第13章 型宣言の読み方・書き方
  • 第14章 多次元配列と型
  • 第15章 関数と型
  • 第16章 構造体と共用体
  • 第17章 型の別名
  • 第18章 型の修飾
  • 第19章 高度な機能
  • 第20章 おわりに

2015年5月28日 0.9.1版

  • 図9.3の誤りを訂正

詳しい更新内容についてはサポートサイトをご覧下さい。(「サポート」メニューから「新しいC言語の教科書」>「更新情報:0.9.1版」)

  • 本書をシェアする

  • カテゴリー

    • C and C++
    • Education
    • Textbooks
    • Computers and Programming
    • Computer Science
  • フィードバック

    著者達にメールする

著者について

KAZUTO TOMINAGA
冨永 和人

冨永 和人(とみなが かずと)

(「新しいC言語の教科書」著者紹介より)

著述やソフトウェア開発などを行なっている個人事業主です。2012年までは工科系大学の准教授で、コンピュータサイエンスを教えていました。授業担当は主にプログラミング、OS、ソフトウェア工学などで、C言語プログラミングは18年間の在任中ほぼずっと担当していました。

初めてC言語に触れたのは、大学に入ると同時にアルバイトでプログラミングがしたいと入ったソフトウェアハウスでUNIXワークステーションを使わせてもらった時です。ちなみに大学の授業で最初に習った言語はFORTRANで、マシンはメインフレームでした。まだC言語を授業で教える時代ではなかったのです。

その後は学校や仕事で数多くの言語に触れ、それらを使ってきましたが、一番長く一貫して実用に使ってきた言語がC言語です。ソフトウェアハウスの仕事以外で、企業向けC言語講座の講師を務めたこともあります。これら(と大学での授業)の経験から、しっかりC言語が分かり、安心してプログラムが書けるようになるテキストをと考えて執筆したのが本書です。

いま現在、仕事でよく使っているのはCとRuby、他に興味のある言語はHaskellです。

略歴

  • 1966年生まれ
  • 1994年 東京工業大学理工学研究科情報工学専攻博士課程単位取得退学
  • 1996年 同専攻より博士(工学)の学位を取得
  • 東京工科大学工学部情報工学科講師、同助教授、米国イリノイ大学アーバナ=シャンペーン校コンピュータサイエンス学科客員研究員、東京工科大学コンピュータサイエンス学部准教授などを経て、2012年4月に独立、

現在

和(かのう)情報網 代表 博士(工学)

主な著書

「図解コンピュータ概論 ソフトウェア・通信ネットワーク」(オーム社)、「組込みユーザのための アセンブリ/C言語読本」(オーム社)、「例解UNIXプログラミング教室」(ピアソン・エデュケーション)、「わかる Git」(和情報網/パブー)

目次

  • はじめに
    • 本書の利用法
    • 本書が扱う範囲
    • 表記法
    • サポート
    • 本書を教科書としてお使い下さる先生方へ
    • 謝辞
  • 1. 準備
    • 1.1 C言語でできること
      • 1.1.1 プログラムとは
      • 1.1.2 プログラムの基本動作
      • 1.1.3 演習
    • 1.2 C言語を使うのに必要なもの
      • 1.2.1 ソフトウェア
      • 1.2.2 ハードウェアとOS
    • 1.3 エディタ
      • 1.3.1 プログラムはテキストファイル
      • 1.3.2 プログラムを書くためのソフトウェア — エディタ
    • 1.4 エディタを選ぶ
      • 1.4.1 独立型のエディタを使うか、IDE を使うか
      • 1.4.2 独立型エディタの紹介
      • 1.4.3 IDE を使うなら
      • 1.4.4 演習
    • 1.5 コンパイラ
      • 1.5.1 コンパイルとコンパイラ
      • 1.5.2 言語処理系
    • 1.6 コンパイラの入手
      • 1.6.1 Linux (UNIX)
      • 1.6.2 OS X
      • 1.6.3 Windows
      • 1.6.4 演習
    • 1.7 ライブラリ
      • 1.7.1 ライブラリとは
      • 1.7.2 C言語の標準ライブラリが提供する機能
      • 1.7.3 C言語ライブラリの入手
    • 1.8 プログラム作成から実行まで
      • 1.8.1 独立型エディタで作成してコマンドで動かす
      • 1.8.2 IDE 内でコンパイルと実行をする
      • 1.8.3 本書では…
    • 1.9 やってみよう
      • 1.9.1 手順
      • 1.9.2 演習
    • 1.10 空白や改行
      • 1.10.1 空白文字の数にあまり意味はない
      • 1.10.2 空白文字の仲間たち
      • 1.10.3 「#」で始まる行は特別
      • 1.10.4 空白類文字がどうしても必要なとき、そうでないとき
      • 1.10.5 空白を使って見やすくコードを書こう
      • 1.10.6 演習
    • 1.11 字下げとタブ
      • 1.11.1 字下げ
      • 1.11.2 タブ文字を使った字下げ
      • 1.11.3 タブ文字による字下げの問題
      • 1.11.4 演習
    • 1.12 日本語を使うときの注意*
      • 1.12.1 コンパイラによる制約*
      • 1.12.2 コンパイラへの指示*
    • 1.13 文字コードの指定*
      • 1.13.1 基本文字と拡張文字*
      • 1.13.2 文字コードを合わせよう*
      • 1.13.3 うまく日本語が使えたら*
      • 1.13.4 演習
    • 1.14 エディタの設定*
      • 1.14.1 おすすめの設定*
      • 1.14.2 演習
  • 2. C言語プログラムの基本
    • 2.1 基本動作 (1):上から順に
      • 2.1.1 API を使った入出力
      • 2.1.2
      • 2.1.3 演習
    • 2.2 基本動作 (2):場合分け
      • 2.2.1 if 文は文を含む文
      • 2.2.2 演習
    • 2.3 基本動作 (3):繰返し
      • 2.3.1 C言語プログラミングの基本
      • 2.3.2 演習
    • 2.4 API の使い方
      • 2.4.1 API の呼び出し
      • 2.4.2 API とヘッダファイル
      • 2.4.3 API の使用法の表現
      • 2.4.4 演習
    • 2.5 エラーと異常動作
      • 2.5.1 コンパイルエラー
      • 2.5.2 実行時エラー
      • 2.5.3 異常動作
      • 2.5.4 バグ
      • 2.5.5 デバッグ表示
      • 2.5.6 演習
  • 3. 変数や定数と型
    • 3.1 変数
      • 3.1.1 変数とは
      • 3.1.2 データ型
      • 3.1.3 変数の宣言
      • 3.1.4 演習
    • 3.2 整数型
      • 3.2.1 整数型の大きさと表現できる範囲
      • 3.2.2 符号付き整数型と符号なし整数型
      • 3.2.3 整数型の一覧
      • 3.2.4 変数の大きさを知る
      • 3.2.5 整数型の順位*
      • 3.2.6 「int」は省略できる*
      • 3.2.7 バイト順序**
      • 3.2.8 演習
    • 3.3 浮動小数点数型
      • 3.3.1 浮動小数点数とは
      • 3.3.2 float 型、double 型、long double 型
      • 3.3.3 型の大きさを知る
      • 3.3.4 演習
    • 3.4 浮動小数点数の誤差*
      • 3.4.1 誤差の発生*
      • 3.4.2 誤差を考慮した比較*
      • 3.4.3 演習*
    • 3.5 数値の入出力
      • 3.5.1 整数の入出力
      • 3.5.2 浮動小数点数の入出力
      • 3.5.3 その他
      • 3.5.4 演習
    • 3.6 識別子
      • 3.6.1 識別子のつけ方
      • 3.6.2 予約語
      • 3.6.3 識別子として使える語の例
      • 3.6.4 識別子として望ましくない語の例
      • 3.6.5 演習
    • 3.7 数値の定数
      • 3.7.1 整数の定数
      • 3.7.2 浮動小数点数の定数
      • 3.7.3 演習
    • 3.8 列挙型*
      • 3.8.1 型は値の集合**
      • 3.8.2 列挙型の基本*
      • 3.8.3 整数としての使い方**
      • 3.8.4 演習
    • 3.9 論理型**
      • 3.9.1 論理型への変換**
      • 3.9.2 論理型と int 型**
      • 3.9.3 演習
  • 4. 式と型変換
    • 4.1
      • 4.1.1 式の評価
      • 4.1.2 式は式を作る
      • 4.1.3 式は型を持つ
      • 4.1.4 評価の順序*
      • 4.1.5 演習
    • 4.2 明示的に型を変換する
      • 4.2.1 代入で型を変換する
      • 4.2.2 キャストで型を変換する
      • 4.2.3 その他の方法*
      • 4.2.4 演習
    • 4.3 数値の型変換*
      • 4.3.1 整数型から整数型への変換*
      • 4.3.2 整数型から浮動小数点数型への変換*
      • 4.3.3 浮動小数点数型から整数型への変換*
      • 4.3.4 浮動小数点数型から浮動小数点数型への変換*
      • 4.3.5 演習
    • 4.4 演算子の優先度と結合性
      • 4.4.1 C言語の演算子一覧
      • 4.4.2 演算子の優先度
      • 4.4.3 演算子の結合性
      • 4.4.4 グループ化のための括弧
      • 4.4.5 演習
    • 4.5 オペランドの型を揃える*
      • 4.5.1 通常の算術型変換*
      • 4.5.2 よく使う型の間の変換*
      • 4.5.3 演習
    • 4.6 整数拡張と通常の算術型変換**
      • 4.6.1 数値演算のときの自動的な型変換**
      • 4.6.2 整数拡張**
      • 4.6.3 通常の算術型変換**
      • 4.6.4 演習
    • 4.7 代入と左辺値**
      • 4.7.1 代入の右辺と左辺の違い**
      • 4.7.2 代入演算子と左辺値・右辺値**
      • 4.7.3 代入式の評価**
      • 4.7.4 式の左辺値が必要な場合**
      • 4.7.5 用語について**
      • 4.7.6 演習
  • 5. 基本的な演算子
    • 5.1 四則演算、剰余、符号の操作
      • 5.1.1 演習
    • 5.2 大小関係、等しいかどうか
      • 5.2.1 0 < x < 2 はうまくいかない
      • 5.2.2 演習
    • 5.3 論理演算子
      • 5.3.1 演習
    • 5.4 ビット単位の演算
      • 5.4.1 ビット単位の論理演算
      • 5.4.2 ビットシフト演算
      • 5.4.3 ビット操作のやり方
      • 5.4.4 演習
    • 5.5 複合代入
      • 5.5.1 演習
    • 5.6 1増やす、1減らす
      • 5.6.1 x++ と ++x
      • 5.6.2 x++ や ++x という式の型*
      • 5.6.3 演習
    • 5.7 条件演算*
      • 5.7.1 評価順序と型変換*
      • 5.7.2 濫用に注意*
      • 5.7.3 演習
    • 5.8 コンマ*
      • 5.8.1 演習
    • 5.9 sizeof 演算子
      • 5.9.1 演習
    • 5.10 副作用に注意*
      • 5.10.1 ひとつの式に副作用を入れすぎない*
      • 5.10.2 副作用完了点**
      • 5.10.3 まとめ**
      • 5.10.4 演習
  • 6. 制御構造
    • 6.1 文とブロック、制御構造
      • 6.1.1
      • 6.1.2 ブロック
      • 6.1.3 制御構造
      • 6.1.4 演習
    • 6.2 if 文による場合分け
      • 6.2.1 ぶらぶら else に注意しよう
      • 6.2.2 演習
    • 6.3 switch 文による場合分け
      • 6.3.1 演習
    • 6.4 while 文による繰返し
      • 6.4.1 演習
    • 6.5 for 文による繰返し
      • 6.5.1 for 文での変数宣言
      • 6.5.2 式の書き方と無限ループ
      • 6.5.3 演習
    • 6.6 do 文による繰返し
      • 6.6.1 演習
    • 6.7 繰返しの制御
      • 6.7.1 break 文
      • 6.7.2 continue 文
      • 6.7.3 演習
    • 6.8 繰返し構造の使い分け*
      • 6.8.1 基本的な使い分け方*
      • 6.8.2 演習
    • 6.9 goto 文による飛び越し*
      • 6.9.1 goto 文とラベル*
      • 6.9.2 goto が役立つ場合*
      • 6.9.3 goto の除去**
      • 6.9.4 演習
  • 7. 関数とプログラム
    • 7.1 C言語の関数の基本
      • 7.1.1 数学の関数とC言語の関数
      • 7.1.2 仮引数と実引数
      • 7.1.3 関数の呼出しと関数からの戻り
      • 7.1.4 引数の値渡し
      • 7.1.5 演習
    • 7.2 関数の引数と戻り値の型
      • 7.2.1 引数の型、戻り値の型
      • 7.2.2 関数の呼出し・戻りと式の評価
      • 7.2.3 型を合わせよう
      • 7.2.4 型が合っていないと型変換が起きる*
      • 7.2.5 演習
    • 7.3 関数の実行
      • 7.3.1 関数の本体の実行
      • 7.3.2 main 関数
      • 7.3.3 関数の役割
      • 7.3.4 演習
    • 7.4 関数の引数と戻り値の void 型
      • 7.4.1 引数の void 型
      • 7.4.2 戻り値の void 型
      • 7.4.3 演習
    • 7.5 関数の型と宣言
      • 7.5.1 関数の型
      • 7.5.2 関数の宣言
      • 7.5.3 関数宣言の位置
      • 7.5.4 関数宣言の役割
      • 7.5.5 演習
    • 7.6 自動変数と再帰呼出し
      • 7.6.1 自動変数
      • 7.6.2 再帰呼出しと自動変数*
      • 7.6.3 演習
    • 7.7 レジスタ変数*
      • 7.7.1 レジスタ変数とは*
      • 7.7.2 自動変数のための予約語 auto*
      • 7.7.3 レジスタ変数についての制約*
      • 7.7.4 レジスタ変数の使い方*
      • 7.7.5 演習
    • 7.8 外部変数
      • 7.8.1 外部変数とは
      • 7.8.2 外部変数の生存期間
      • 7.8.3 外部変数の使い方
      • 7.8.4 外部変数の定義と宣言
      • 7.8.5 演習
    • 7.9 C言語プログラムの構造
      • 7.9.1 ソースファイルの基本構造
      • 7.9.2 コンパイルとリンク
      • 7.9.3 分割コンパイル
      • 7.9.4 演習
    • 7.10 ファイル外部への参照
      • 7.10.1 外部変数があるプログラムを分割する
      • 7.10.2 演習
    • 7.11 変数の初期化
      • 7.11.1 変数の初期化の仕方
      • 7.11.2 初期化と代入の違い
      • 7.11.3 初期化の右辺に許される式
      • 7.11.4 演習
    • 7.12 静的変数
      • 7.12.1 静的変数とは
      • 7.12.2 静的変数の領域確保と初期化のタイミング
      • 7.12.3 演習
    • 7.13 変数の分類
      • 7.13.1 有効範囲と生存期間による分類
      • 7.13.2 有効範囲が重なっている場合
      • 7.13.3 演習
    • 7.14 static 付き関数
      • 7.14.1 演習
    • 7.15 インライン関数**
      • 7.15.1 関数呼出しのオーバヘッドを省く**
      • 7.15.2 インライン展開**
      • 7.15.3 複数のファイルで同じインライン関数を使う**
      • 7.15.4 外部的インライン関数と内部的インライン関数**
      • 7.15.5 inline は単なるヒント**
      • 7.15.6 インライン関数を使うときの注意**
      • 7.15.7 演習
  • 8. 前処理
    • 8.1 前処理の概要
      • 8.1.1 前処理の役割
      • 8.1.2 行の連結
      • 8.1.3 演習
    • 8.2 マクロ
      • 8.2.1 マクロとは
      • 8.2.2 マクロの定義と展開
      • 8.2.3 引数付きマクロ
      • 8.2.4 マクロと列挙定数*
      • 8.2.5 引数付きマクロとインライン関数*
      • 8.2.6 マクロ定義の取り消し
      • 8.2.7 処理系によって定義されているマクロ*
      • 8.2.8 演習
    • 8.3 マクロ定義での文字列処理**
      • 8.3.1 マクロ本体で使える文字列演算子**
      • 8.3.2 演習
    • 8.4 可変個引数マクロ**
      • 8.4.1 実引数に合わせて仮引数の個数を変える**
      • 8.4.2 固定引数はなくてもいい**
      • 8.4.3 演習
    • 8.5 ファイルの取込み*
      • 8.5.1 #include によるファイルの取込み*
      • 8.5.2 ヘッダファイルの書き方*
      • 8.5.3 演習
    • 8.6 条件付きコンパイル*
      • 8.6.1 条件付きコンパイルの役割*
      • 8.6.2 条件付きコンパイルのための指令*
      • 8.6.3 defined 演算子と #ifdef、#ifndef*
      • 8.6.4 ちょっとしたコツ:#if 0 によるコメント化*
      • 8.6.5 演習
    • 8.7 その他の前処理指令**
      • 8.7.1 #error 指令**
      • 8.7.2 #line 指令**
      • 8.7.3 #pragma 指令**
      • 8.7.4 演習
  • 9. 配列とポインタ
    • 9.1 配列の基本
      • 9.1.1 整数値で変数を選ぶ
      • 9.1.2 配列の宣言と要素へのアクセス
      • 9.1.3 配列名と要素数
      • 9.1.4 演習
    • 9.2 配列の初期化
      • 9.2.1 配列の初期化の書き方
      • 9.2.2 初期化の応用*
      • 9.2.3 初期値として書ける式
      • 9.2.4 演習
    • 9.3 多次元配列の基本
      • 9.3.1 2次元配列
      • 9.3.2 2次元配列の初期化
      • 9.3.3 3次元以上の多次元配列
      • 9.3.4 演習
    • 9.4 ポインタの基本
    • 9.5 ポインタの原理
      • 9.5.1 ポインタの型
      • 9.5.2 *p は変数のようなもの
      • 9.5.3 演算子 * と &
      • 9.5.4 まとめ
      • 9.5.5 演習
    • 9.6 ポインタの型と演算子
      • 9.6.1 ポインタの型と値
      • 9.6.2 アドレス演算 &
      • 9.6.3 間接演算「*」
      • 9.6.4 アドレス演算と間接演算は逆*
      • 9.6.5 演習
    • 9.7 ポインタの役割
      • 9.7.1 演習
    • 9.8 ポインタと配列
      • 9.8.1 配列要素をポインタで指す
      • 9.8.2 ポインタに整数を足す・引く
      • 9.8.3 ポインタは配列と同じように使える
      • 9.8.4 ポインタ変数のインクリメントによる配列アクセス
      • 9.8.5 配列はインクリメント・デクリメントできない
      • 9.8.6 演習
    • 9.9 配列演算子とポインタ*
      • 9.9.1 ポインタ値+1が次の要素を指す仕組み*
      • 9.9.2 配列はどう扱われるか*
      • 9.9.3 配列演算子の評価**
      • 9.9.4 配列演算子の定義**
      • 9.9.5 ポインタに対する演算*
      • 9.9.6 演習
    • 9.10 void 型へのポインタ
      • 9.10.1 void 型
      • 9.10.2 void 型へのポインタ
      • 9.10.3 ポインタの変換と境界調整**
      • 9.10.4 演習
    • 9.11 空ポインタ
      • 9.11.1 空ポインタの使い方
      • 9.11.2 空ポインタを表わすマクロ NULL
      • 9.11.3 空ポインタはゼロか**
      • 9.11.4 演習
    • 9.12 ポインタへのポインタ*
      • 9.12.1 ポインタ変数へのポインタ*
      • 9.12.2 ポインタの配列*
      • 9.12.3 演習
  • 10. 関数とポインタ
    • 10.1 関数の引数にポインタを渡す
      • 10.1.1 演習
    • 10.2 関数の引数に配列を渡す*
      • 10.2.1 配列を実引数として渡すとポインタが渡る*
      • 10.2.2 配列の大きさを知らせる*
      • 10.2.3 演習
    • 10.3 関数へのポインタ*
      • 10.3.1 関数へのポインタを得る*
      • 10.3.2 関数へのポインタの型**
      • 10.3.3 関数へのポインタの伝統的な使い方**
      • 10.3.4 演習
    • 10.4 関数呼出し式の評価*
      • 10.4.1 関数の呼出し*
      • 10.4.2 関数へのポインタを得る*
      • 10.4.3 関数呼出しにおける副作用完了点**
      • 10.4.4 演習
    • 10.5 関数の引数宣言の省略**
      • 10.5.1 関数ポインタ変数の宣言での引数の省略**
      • 10.5.2 関数宣言での引数の省略**
      • 10.5.3 まとめ**
      • 10.5.4 演習
    • 10.6 関数へのポインタの相互変換**
      • 10.6.1 戻り値の型の違う関数へのポインタをひとつの変数で扱う**
      • 10.6.2 演習
    • 10.7 可変個の関数引数**
      • 10.7.1 引数の個数が可変である関数**
      • 10.7.2 可変個引数関数の宣言**
      • 10.7.3 可変個引数関数の定義**
      • 10.7.4 実引数拡張に注意**
      • 10.7.5 演習
  • 11. 動的記憶域確保*
    • 11.1 動的確保の基本*
      • 11.1.1 動的記憶域確保とは*
      • 11.1.2 基本的な使い方*
      • 11.1.3 動的に確保された領域の生存期間*
      • 11.1.4 演習
    • 11.2 伸びる配列を作る*
      • 11.2.1 realloc 関数*
      • 11.2.2 伸びる配列の実装*
      • 11.2.3 演習
  • 12. 文字と文字列
    • 12.1 文字コード
      • 12.1.1 文字コードとコード値
      • 12.1.2 演習
    • 12.2 文字定数
      • 12.2.1 文字定数の表現
      • 12.2.2 バックスラッシュ表記
    • 12.3 char 型
      • 12.3.1 char 型は1バイト
      • 12.3.2 演習
    • 12.4 1文字ずつの処理
      • 12.4.1 1文字ずつの処理の基本形
      • 12.4.2 演習
    • 12.5 文字列
      • 12.5.1 文字へのポインタと文字列
      • 12.5.2 演習
    • 12.6 文字列の入出力
      • 12.6.1 文字列入力 fgets
      • 12.6.2 文字列出力 fputs
      • 12.6.3 演習
    • 12.7 文字列と関数の引数
      • 12.7.1 文字列を関数に渡す
      • 12.7.2 関数から文字列を引数にもらう
      • 12.7.3 演習
    • 12.8 文字列リテラル
      • 12.8.1 文字列リテラルとは
      • 12.8.2 文字列リテラルは読出し専用の無名の配列*
      • 12.8.3 文字列リテラルを使った初期化
      • 12.8.4 文字列リテラルの連結
      • 12.8.5 演習
    • 12.9 ごみポインタ*
      • 12.9.1 初期化されていない自動変数*
      • 12.9.2 生存期間の終わった領域を指しているポインタ*
      • 12.9.3 演習
    • 12.10 文字の2次元配列
      • 12.10.1 文字の2次元配列の作り方・使い方
      • 12.10.2 演習
    • 12.11 文字列のベクタ
      • 12.11.1 文字列のベクタとは
      • 12.11.2 文字列ベクタの型と初期化
      • 12.11.3 空ポインタの利用
      • 12.11.4 演習
    • 12.12 コマンド行引数
      • 12.12.1 main 関数の仮引数
      • 12.12.2 演習
    • 12.13 関数名を表わす文字列**
      • 12.13.1 自動的に作られる変数 __func__**
      • 12.13.2 演習
    • 12.14 かなや漢字を扱う*
      • 12.14.1 コンパイラの文字コードを合わせる*
      • 12.14.2 多バイト文字のまま扱う方法*
      • 12.14.3 ワイド文字を使う方法*
      • 12.14.4 どの方法を使えばいいか*
      • 12.14.5 演習
    • 12.15 ワイド文字**
      • 12.15.1 ワイド文字とワイド文字列**
      • 12.15.2 多バイト文字とワイド文字の間の入出力時の変換**
      • 12.15.3 ワイド文字を扱う API**
      • 12.15.4 まとめ**
      • 12.15.5 演習
  • 13. 型宣言の読み方・書き方*
    • 13.1 C言語の型宣言の基本*
      • 13.1.1 演習
    • 13.2 型宣言の読み方**
    • 13.3 型宣言の書き方**
      • 13.3.1 データ構造を作る**
      • 13.3.2 API を呼び出す**
      • 13.3.3 演習
  • 14. 多次元配列と型**
    • 14.1 配列とポインタの関係**
      • 14.1.1 文字列ベクタの各要素を指すポインタの宣言
      • 14.1.2 仮引数の配列宣言
      • 14.1.3 演習
    • 14.2 多次元配列の実際**
      • 14.2.1 多次元配列のメモリ内配置**
      • 14.2.2 多次元配列へのアクセス**
      • 14.2.3 演習
    • 14.3 多次元配列の型**
      • 14.3.1 演習
    • 14.4 多次元配列とポインタ**
      • 14.4.1 演習
    • 14.5 配列リテラル**
      • 14.5.1 演習
    • 14.6 1次元配列を多次元配列として使う**
      • 14.6.1 添字をその都度計算する方法
      • 14.6.2 型を変換する方法**
      • 14.6.3 演習
  • 15. 関数と型**
    • 15.1 関数の複雑な型を読む**
      • 15.1.1 引数宣言を分けて考えよう**
      • 15.1.2 関数呼出し式の型に注目する**
      • 15.1.3 演習
    • 15.2 関数の型を書く**
      • 15.2.1 例:電卓プログラム**
      • 15.2.2 演習
  • 16. 構造体と共用体
    • 16.1 構造体の基本
      • 16.1.1 配列と構造体
      • 16.1.2 構造体の型
      • 16.1.3 タグとメンバ名
      • 16.1.4 構造体の利用
      • 16.1.5 構造体の初期化
      • 16.1.6 演習
    • 16.2 構造体の内部構造*
      • 16.2.1 演習
    • 16.3 構造体型をヘッダファイルで宣言する
      • 16.3.1 演習
    • 16.4 構造体リテラル**
      • 16.4.1 演習
    • 16.5 構造体の配列
      • 16.5.1 構造体の配列の宣言と利用
      • 16.5.2 構造体の配列の初期化
      • 16.5.3 演習
    • 16.6 構造体へのポインタ
      • 16.6.1 演習
    • 16.7 構造体を関数とやり取りする*
      • 16.7.1 値としてやり取りする*
      • 16.7.2 ポインタを介してやり取りする*
      • 16.7.3 その他の方法*
      • 16.7.4 演習
    • 16.8 ビットフィールド*
      • 16.8.1 演習
    • 16.9 ビットフィールドの内部構造**
      • 16.9.1 struct bill の構造**
      • 16.9.2 名前のないビットフィールド**
      • 16.9.3 次の語に送られる場合**
      • 16.9.4 次の語に送りたい場合**
      • 16.9.5 演習
    • 16.10 自己参照的構造体*
      • 16.10.1 自分自身を含む構造体は作れない*
      • 16.10.2 演習
    • 16.11 共用体の基本
      • 16.11.1 データを入れたメンバを使ってデータを取り出す
      • 16.11.2 どのメンバで最後に入れたか知る方法はない
      • 16.11.3 コード例
      • 16.11.4 演習
    • 16.12 共用体の利用法*
      • 16.12.1 演習
    • 16.13 フレキシブル配列メンバ**
      • 16.13.1 フレキシブル配列メンバの宣言**
      • 16.13.2 フレキシブル配列メンバのための領域の確保**
      • 16.13.3 フレキシブル配列メンバの使い方**
      • 16.13.4 演習
  • 17. 型の別名*
    • 17.1 型に別名をつける*
      • 17.1.1 自己参照的構造体の宣言で使うとき*
      • 17.1.2 システム標準のヘッダファイルで定義される型*
      • 17.1.3 演習
    • 17.2 typedef を使った宣言の読み方**
      • 17.2.1 typedef 宣言の読み方**
      • 17.2.2 別名を使った宣言の読み方**
      • 17.2.3 演習
    • 17.3 typedef 宣言の書き方**
      • 17.3.1 簡単な型に別名を与えたい場合*
      • 17.3.2 構造体型や列挙型などに短い名前をつけたい場合*
      • 17.3.3 複雑な型の中身を見ないで扱いたい場合**
      • 17.3.4 演習
  • 18. 型の修飾*
    • 18.1 型の修飾の種類*
      • 18.1.1 const 修飾*
      • 18.1.2 volatile 修飾**
      • 18.1.3 restrict 修飾**
      • 18.1.4 型修飾をどう使うか**
      • 18.1.5 演習
    • 18.2 型修飾付きの宣言*
      • 18.2.1 概略*
      • 18.2.2 読み方**
      • 18.2.3 書き方**
      • 18.2.4 演習
  • 19. 高度な機能*
    • 19.1 可変長配列*
      • 19.1.1 自動変数の可変長配列*
      • 19.1.2 仮引数の可変長配列宣言**
      • 19.1.3 自動変数と仮引数の可変長配列の違い**
      • 19.1.4 演習
    • 19.2 複素数型**
      • 19.2.1 複素数型の種類**
      • 19.2.2 定数**
      • 19.2.3 演算子とライブラリ API**
      • 19.2.4 演習
    • 19.3 型総称マクロ**
      • 19.3.1 演習
    • 19.4 C11の機能**
      • 19.4.1 C11で追加された主な機能**
      • 19.4.2 C11でオプションとなった機能**
      • 19.4.3 C11で取り除かれた機能**
      • 19.4.4 演習
  • 20. おわりに
  • 参考文献
  • コードリスト一覧
  • 索引
  • 著者について

Leanpubは無条件かつノーリスクで100%の満足を保証します

Leanpubでお買い上げいただいた書籍は、ご購入後60日以内であれば全額返金いたします。払い戻しはわずか2クリックで完了します。払い戻し処理は手作業で行うため、完了まで数日かかる場合があります。詳しくは利用規約をご覧ください。

80%のロイヤルティ。$20の本で$16を獲得。

私たちは80%のロイヤルティを支払います。これは誤植ではありません:$20の販売で$16を獲得します。$20であなたの本やコースの5000コピーを売った場合、$80,000を獲得します。

(はい、Leanpubでそれ以上をすでに獲得している著者もいます。)

実際には、著者はLeanpubで執筆、出版、販売を行うことで、1200万ドル以上を獲得しました。

Leanpubでの執筆について詳しく知る

無料更新。無料アップデート。 DRMフリー。

Leanpubの本を購入すると、著者が本を更新している限り、無料で更新されます!多くの著者は、Leanpubを使用して、執筆中の書籍を出版しています。いつ本を購入したか、いくら支払ったかに関係なく、すべての読者は無料のアップデートを入手できます(無料も含む)。

Leanpubの本はPDF(コンピューター用)、EPUB(iPad用)、MOBI(Kindle用)のフォーマットに対応してます。本に含まれるフォーマットは、このページの右上隅に表示されます。

Leanpubの本には、DRMコピー防止のナンセンスがないため、サポートされているデバイスで簡単に読むことができます

Leanpubの電子書籍形式とそれらを読む場所の詳細をご覧ください

Leanpubで執筆と出版

著者や編集者はLeanpubを通して執筆中や完成した素晴らしい本を出版しています。Leanpubを利用して本を執筆、出版、売ることが出来ます! Leanpubは、真剣な著者にとって強力なプラットフォームであり、シンプルでエレガントな執筆と出版のワークフローと、執筆中の電子書籍の販売に焦点を当てたストアを組み合わせています. Leanpubは、著者にとって魔法のタイプライターです。プレーンテキストで書くだけで、電子書籍をボタン一つで出版出来ます。すごく簡単です。

Leanpubでの執筆についてもっと知る