構造体

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

構造体(こうぞうたい、: structure)はプログラミング言語におけるデータ型の一つで、1つもしくは複数の値をまとめて格納できる型。それぞれのメンバー(フィールド)は型が異なっていてもよい点が配列と異なる。

C/C++C#などでstructとしてサポートされているほか、Visual Basicのユーザー定義型や、PascalAdarecord型も構造体に相当する。オブジェクト指向言語では、より純粋なオブジェクト指向を目指して削除されることも多い(Javaなど)。構造体がない言語では、クラスで代用される。逆にオブジェクト指向言語でないCなどでオブジェクト指向プログラミングを模倣するために構造体を使うこともある。標準ライブラリのFILE型がその典型的な例である。

C言語の例[編集]

#include <stdio.h>

/* PersonalDataを構造体として定義 */
struct PersonalData
{
  /* メンバー変数 (つまり構造体の要素) を名前と年齢とする */
  char Name[100];
  int Age;
};

/* 上で定義された構造体を使ってみる */
int main(void)
{
  struct PersonalData pd; /* 構造体変数の宣言 */
  struct PersonalData *ppd; /* 構造体へのポインタ */

  scanf("%s", pd.Name); /* 値を入力 */
  scanf("%d", &(pd.Age)); /* 値を入力 */

  ppd = &pd;
  ppd->Age++; /* ポインタの参照先のメンバーにアクセスするには->を使う。*/

  printf("%s-%d\n", pd.Name, pd.Age);
  return 0;
}

アライメント[編集]

構造体のメンバーのメモリレイアウトは、必ずしも連続しているとは限らない。実行環境に合わせてアクセス効率が最適になるよう、コンパイラによってバイト境界に応じた無名の詰め物(パディング)が挿入されることがある。このパディングはシリアライズや相互運用などで問題になることがあるため、フィールド属性やコンパイラ特有のディレクティブによってアライメントを明示的に調整できる言語や処理系も存在する[1] [2]

脚注[編集]

[ヘルプ]

関連項目[編集]