はじめての C
[Learning GNU C]
6.8. 構造化データ structured data
C で 新しい、例えば "Person" という 型を つくることが できる。 "Person" へは "name" という 文字列、"age" という int (型) それに "height_in_cm" という 別の int を 記憶させられる。 これが 新しい 型で つくった code だ。
struct Person {
char *name;
int age;
int height_in_cm;
};
この code から "struct Person" という 変数が つくられる。いつものように この型に 入っている 変数と 変数の ポインタを つくることが できる。 さて、"struct Person" 型の 変数 "sidekick" を 宣言した。 そこの "age" 領域 field へ アクセスするには "sidekick.age" が 使われている。 先の 定義 "struct Person" を使った 即製の 例題で これらのことを はっきりさせよう。
Example 6-4. person_struct.h and person_struct.c
struct Person {
char *name;
int age;
int height_in_cm;
};
#include <stdio.h>
#include "person_struct.h"int main()
{
struct Person hero = {"Robin Hood", 20, 191};
struct Person sidekick;
sidekick.name = "John Little";
sidekick.age = 31;
sidekick.height_in_cm = 237;
printf("%s is %d years old and stands %dcm tall in his socks.\n", sidekick.name, sidekick.age, sidekick.height_in_cm);
printf("He is often seen with %s.\n", hero.name);
return 0;
}
コンパイルし 実行すると このように 表示される。
John Little is 31 years old and stands 237cm tall in his socks.
He is often seen with Robin Hood.
6.9. 共用体 union
C は また 動的 dynamic な 型を もつことの できる 型にも 対応 support していて、1つの 変数を ある時点で "int" に、次に "double" として、その後に "unsigned long long" へ することが できる。 こうした data の 型は "union" という キーワード を 使う 以外は 構造体と 同じように 宣言される。 (ただし) その 作動 behavior は 構造体とは 全く 異なる。