C 言語のマップまたは構造体
このチュートリアルでは、マップまたは構造体を使用して C で変数のコレクションを作成する方法について説明します。
C 言語のマップまたは構造体
構造体は、異なるまたは同じデータ型の変数のコレクションです。たとえば、人の年齢、名前、身長を保存するプロファイルを作成する場合は、構造体を使用してすべての情報を 1つのマップまたは構造体に保存できます。
struct
キーワードを使用して、C 言語で構造体を作成できます。構造体の基本的な構文を以下に示します。
struct NameOfStructure {
dataType_1 member_1;
dataType_2 member_2;
....
};
たとえば、人の情報を格納するための構造体を作成しましょう。以下のコードを参照してください。
struct Person {
char *name;
int age;
float height;
};
構造体は、構造体内で定義されたすべての変数を含むオブジェクトを作成するために使用できるクラスです。構造体のオブジェクトを作成するには、struct
キーワード、構造体の名前、オブジェクトの名前の順に記述する必要があります。
オブジェクト名とドットで囲まれた変数名を使用して、任意の構造体メンバーにアクセスできます。変数の値を取得したり、代入演算子を使用してそれらの値を変更したりできます。
たとえば、上記の構造体の 2つのオブジェクトを作成し、それらに値を格納して、printf()
関数を使用して出力してみましょう。以下のコードを参照してください。
#include <stdio.h>
struct Person {
char *name;
int age;
float height;
};
int main() {
struct Person person1, person2;
person1.name = "Max";
person1.age = 20;
person1.height = 6.2;
printf("Person 1 name = %s\n", person1.name);
printf("Person 2 name = %s", person2.name);
}
出力:
Person 1 name = Max
Person 2 name =
上記のコードでは、2つの Person
オブジェクトの名前を出力しました。出力では、最初の人の名前が表示されていることがわかりますが、2 番目の人の名前が保存されていないため、2 番目の人の名前は印刷されません。
2つの構造体オブジェクトの変数値は、同一でも異なっていてもかまいませんが、独立しています。上記のコードのように、他の変数の値を取得または変更することもできます。
ネストされた構造体と呼ばれる他の構造体の内部に構造体を作成することもできます。他の構造体とアタッチする構造体のオブジェクトを作成してから、オブジェクト名を使用してその変数にアクセスする必要があります。
たとえば、別の構造体を作成して、上記の構造体にリンクしてみましょう。以下のコードを参照してください。
#include <stdio.h>
struct job {
char *name;
int duration;
};
struct Person {
struct job j;
char *name;
int age;
float height;
};
int main() {
struct Person person1, person2;
person1.j.name = "Engineer";
person1.name = "Max";
person1.age = 20;
person1.height = 6.2;
printf("Person 1 job name = %s\n", person1.j.name);
printf("Person 1 name = %s", person1.name);
}
出力:
Person 1 job name = Engineer
Person 1 name = Max
上のコードでは、ある人の仕事に関する情報を格納するために別の構造体を作成しました。その変数にアクセスするには、まず親の構造体(この場合は Person
)にアクセスし、次に構造体 job
の変数にアクセスする必要があります。
2つの構造体を作成してリンクしましたが、必要な数の構造体を作成して相互にリンクすることができます。
ネストされた構造体が多数ある場合は、変数の情報を取得するために正しいマップを使用していることを確認する必要があります。構造体は、人や仕事に関する情報など、さまざまな情報を保存する場合に役立ちます。