定本 Cプログラマのためのアルゴリズムとデータ構造 3-2

データ構造の実現

基本データ型

基本データ型をベースにして、ポインタ、配列、構造体(stract)、共用体(union)、関数を組み合わせて任意のデータ型をつくれる

  • 基本データ型は言語によって大差は無いが、C言語には文字列型がない

列挙型(enumeration type)

あらかじめとり打つ値が限定されている型。

単純にマクロを使うと起こる問題

何かC言語ではマクロ定数を利用して「#define UDON 1」などとできるが、
UDONNなどと書いてもすぐにエラー箇所が見つからなかったりする。

どうするか

マクロを使うという考えを1歩進めればいい。
列挙型は、まさにそれ。
たとえばfood型というudonとriceの2つの値だけとることができる列挙型を作り、
食べ物を表す時に列挙型のfoodを利用するようにすれば、
udonnと書いたときに列挙型foodがとることができない値として書き間違えを検出できる。

enum food{udon, rice, soba}
enum food lunch

Cではenumで列挙型をつくる。
上記のようにすると昼飯にはうどんか白米か蕎麦しか食べられないようになる。
ラーメンなどもってのほかである。

配列(array)

同じ型の要素を集めたもの。添え字(index)で識別する。

構造体(structure)

異なる型のデータを集めたもの。C以外の一般ではレコード構造(record structure)と言う。

  • メンバ(member)
    • 構造体の各要素
    • ほかの言語ではフィールド(field)という

ポインタ

  • NULLポインタ
    • 何もさしていない状態

Cのポインタは3種類くらいに分類できそうだね

  • データ構造としてのポインタ
  • 参照渡しのパラメタのためのポインタ
  • 配列参照のためのポインタ

ふむふむ。

この辺はJavaを使ったことがあるので理解できる。

ポインタについては別途学習しなおす必要がありそうやなー。