先頭へ戻る

構造体 | Programming Place Plus 用語集

Programming Place Plus トップページ -- 用語集

先頭へ戻る

名称

解説

複数のデータをひとまとめにしたデータ型のことです。

C言語や C++、C# といったいくつかのプログラミング言語に存在し、キーワード「struct」を使って記述します。ほかのプログラミング言語でも、レコード型やユーザー定義型といった同義で存在する場合があります。

構造体自体が型であるため、構造体を使用するにはまず、どのような型であるか定義することから始めます。以下のコードはC言語の例です。

// 構造体 SampleStruct を定義
struct SampleStruct {
     int   a;
     float b;
     char  c[16];
};

int型、float型、char型の配列(=文字列)というデータをひとまとめにした型(SampleStruct)を定義しています。このように、構造体を使って、自由に新たな型を生み出すことができます。

そして、構造体型の変数を定義して使用します。

int main(void)
{
     struct SampleStruct ss;
     ss.a = 10;
     ss.b = 1.0f;
     strcpy(ss.c, "abc");

     return 0;
}

C言語の構造体についての詳細は、C言語編第26章を参照してください。

構造体に含まれる各データのことを、要素メンバ、メンバ変数、フィールドといった用語で表現します。

すべての要素の型が同じでなければならない制約が課せられていることが多い配列と違い、要素の型がばらばらでも構わない特徴があります。しかしそれは、各要素が必要とするメモリ領域の大きさもばらばらになり得るということであり、各要素が配置されるメモリアドレスも一定間隔になりません(配列であれば、すべての要素が連続的に並ぶことが保証されます)。

メモリアクセスの仕組みの都合上、アクセスの効率が悪い(あるいはアクセスできない)メモリアドレスがあり、そのような位置に要素が配置されないように調整しなければなりません(アラインメント)。この調整のために、コンパイラは、要素と要素のあいだや、末尾にパディングと呼ばれる空白領域を挿入します。パディング部分には意味があるデータが含まれていないので、配列よりもメモリの利用効率が劣る可能性があります。

アラインメントに関するもう少し詳しい解説がC言語編37章にあります。


参考リンク

更新履歴


用語集のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
Twitter でツイート Twitter をフォロー LINE で送る
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー