C言語におけるstructの使い方を詳しく解説
C言語では構造体( Struct) を使用して、グループのさまざまな種類のデータを保存します。構造体の定義形式は次のとおりです:
struct 结构体名{ 结构体所包含的变量或数组 };
構造体は、複数の変数または配列を含むコレクションです。それらの型は同じでも異なっていても構いません。そのような各変数または配列は、構造体のメンバーと呼ばれます。
推奨「c 言語チュートリアル 」
次の例をご覧ください。
struct stu{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在学习小组 float score; //成绩 };
stu は構造体の名前です。 5人のメンバー、それぞれ名前、番号、年齢、グループ、スコア。構造体のメンバーは、初期化できないことを除いて、変数や配列と同じ方法で定義されます。
中括弧の後のセミコロンに注意してください。省略することはできません。これは完全なステートメントです。
構造体はデータ型でもあり、プログラマ自身が定義し、他の複数の型のデータを含めることができます。
int、float、char などのデータ型は C 言語自体によって提供されており、分割することはできません。これらを基本データ型と呼び、構造体には複数の基本データ型を含めることもできます。複合データ型または構築データ型と呼ばれる他の構造を含めることができます。
構造変数
構造はデータ型であるため、それを使用して変数を定義できます。例:
struct stu stu1, stu2;
は 2 つの変数 stu1 と stu2 を定義します。どちらも stu 型で、5 つのメンバーで構成されます。キーワード struct を省略できないことに注意してください。
stu は「テンプレート」のようなもので、定義された変数は同じプロパティを持ちます。構造を「図面」、構造変数を「部品」に例えることもでき、同じ図面に基づいて作られた部品は同じ特性を持ちます。
構造体を定義するときに構造体変数を定義することもできます:
struct stu{
char *name; //Name
int num ; //学生番号
int age; //年齢
char group; //研究グループ
floatスコア; //Score
} stu1, stu2;
変数を構造体定義の最後に置くだけです。
必要な変数が stu1 と stu2 の 2 つだけで、後で他の変数を定義するために構造体名を使用する必要がない場合は、以下に示すように、定義時に構造体名を指定する必要はありません。 :
struct{ //No stu
char *name; //Name
int num; //学生番号
int age; // Age
char group; //Study group
floatスコア; //Score
} stu1, stu2;
これを書くのは簡単ですが、構造体 name がないため、この構造体を使用して後で新しい変数を定義することはできません。
理論的には、構造体の各メンバーはメモリに連続的に格納され、配列と非常によく似ています。たとえば、上記の構造体変数 stu1 と stu2 のメモリ分布は次の図のようになります。 、合計 4 4 4 1 4 = 17 バイトを占めます。
ただし、コンパイラの特定の実装では、各メンバー間にギャップが存在する可能性があり、stu1 と stu2 では、メンバー変数 group とスコアの間に 3 バイトの空白が埋められています (下図を参照)。 。このように計算すると、stu1 と stu2 は実際には 17 3 = 20 バイトを占有します。
メンバー変数間の「亀裂」の原因については、「C 言語メモリの基礎」トピックの「アドレス指定効率を向上させるための C 言語メモリ アライメント」セクションで詳しく説明します。
メンバーの取得と割り当て
構造体は配列に似ていますが、データの集合でもあり、全体的に使用することにはあまり意味がありません。配列では添字 [ ] を使用して単一の要素を取得し、構造体ではドット. を使用して単一のメンバーを取得します。構造体のメンバーを取得するための一般的な形式は次のとおりです。
结构体变量名.成员名;
この方法では、メンバーの値を取得でき、メンバーに値を割り当てることもできます。
#include <stdio.h> int main(){ struct{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在小组 float score; //成绩 } stu1; //给结构体成员赋值 stu1.name = "Tom"; stu1.num = 12; stu1.age = 18; stu1.group = 'A'; stu1.score = 136.5; //读取结构体成员的值 printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", stu1.name, stu1.num, stu1.age, stu1.group, stu1.score); return 0; }
実行結果:
Tom's 生徒番号は 12 歳、年齢は 18 歳、グループ A では、今年のスコアは 136.5 です。
メンバーに 1 つずつ値を割り当てるだけでなく、定義時に値を全体として割り当てることもできます。たとえば、次のようになります。
struct{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在小组 float score; //成绩 } stu1, stu2 = { "Tom", 12, 18, 'A', 136.5 };
ただし、全体の割り当ては次の場合に限定されます。構造体変数の定義 使用中は、メンバーに値を代入することしかできません。これは、配列の代入とよく似ています。
構造体はカスタム データ型であり、変数作成用のテンプレートであり、メモリ スペースを占有しないことに注意してください。実際のデータが含まれるのは構造体変数のみであり、格納するためのメモリ スペースが必要です。
プログラミング関連のコンテンツの詳細については、php 中国語 Web サイトの プログラミング入門 列に注目してください。
以上がC言語での構造体の使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。