はじめての 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 は 構造体とは 全く 異なる。