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;
.a = 10;
ss.b = 1.0f;
ss(ss.c, "abc");
strcpy
return 0;
}
C言語の構造体についての詳細は、C言語編第26章を参照してください。
構造体に含まれる各データのことを、要素、メンバ、フィールド(メンバ変数)といった用語で表現します。
すべての要素の型が同じでなければならない制約が課せられていることが多い配列と違い、要素の型がばらばらでも構わない特徴があります。しかしそれは、各要素が必要とするメモリ領域の大きさもばらばらになり得るということであり、各要素が配置されるメモリアドレスも一定間隔になりません(配列であれば、すべての要素が連続的に並ぶことが保証されます)。
メモリへのアクセスの仕組み上、アクセスの効率が悪い(あるいはアクセスできない)メモリアドレスがあり、そのような位置に要素が配置されないように調整しなければなりません(アラインメント)。この調整のために、コンパイラは、要素と要素のあいだや、末尾にパディングと呼ばれるデータを挿入します。パディング部分の中身には意味がないので、配列よりもメモリの利用効率が劣る可能性があります。
アラインメントに関するもう少し詳しい解説がC言語編37章にあります。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |