C構造体
C 構造体
このチュートリアルでは、例を使用して C プログラミングの構造体型について学習します。
C プログラミングでは、構造体 (または構造体) は、1 つの名前の下にある変数 (さまざまな型の可能性があります) のコレクションです。
構造の定義
構造体変数を作成する前に、そのデータ型を定義する必要があります。構造体を定義するには、struct
キーワードが使用されています。
構造体の構文
struct structureName {
dataType member1;
dataType member2;
...
};
たとえば、
struct Person {
char name[50];
int citNo;
float salary;
};
ここでは、派生型 struct Person
が定義されています。これで、このタイプの変数を作成できます。
構造体変数の作成
struct
の場合 型が宣言されていますが、ストレージまたはメモリは割り当てられていません。特定の構造型のメモリを割り当てて操作するには、変数を作成する必要があります。
構造変数を作成する方法は次のとおりです:
struct Person {
// code
};
int main() {
struct Person person1, person2, p[20];
return 0;
}
struct
を作成する別の方法 変数は:
struct Person {
// code
} person1, person2, p[20];
どちらの場合も、
- person1 と person2
struct Person
です 変数 - p[]
struct Person
です サイズ 20 の配列
構造体のメンバーへのアクセス
構造体のメンバーにアクセスするために使用される演算子には 2 種類あります。
<オール>.
- 会員オペレーター->
- 構造ポインタ演算子 (次のチュートリアルで説明します)salary にアクセスしたいとします。 person2 の .方法は次のとおりです。
person2.salary
例 1:C++ 構造体
#include <stdio.h>
#include <string.h>
// create struct with person1 variable
struct Person {
char name[50];
int citNo;
float salary;
} person1;
int main() {
// assign value to name of person1
strcpy(person1.name, "George Orwell");
// assign values to other person1 variables
person1.citNo = 1984;
person1. salary = 2500;
// print struct variables
printf("Name: %s\n", person1.name);
printf("Citizenship No.: %d\n", person1.citNo);
printf("Salary: %.2f", person1.salary);
return 0;
}
出力
Name: George Orwell Citizenship No.: 1984 Salary: 2500.00
このプログラムでは、struct
を作成しました。 Person
という名前 . Person
の変数も作成しました person1という名前 .
main()
で 、 Person
で定義された変数に値を割り当てました person1 の場合 オブジェクト。
strcpy(person1.name, "George Orwell");
person1.citNo = 1984;
person1. salary = 2500;
strcpy()
を使用していることに注意してください person1.name に値を割り当てる関数 .
これは name のためです char
です 配列 (C 文字列) であり、代入演算子 =
は使用できません 文字列を宣言した後にそれを使用します。
最後に、person1 のデータを印刷しました .
キーワード typedef
typedef
を使用します キーワードを使用して、データ型の別名を作成します。変数を宣言する構文を簡素化するために、一般的に構造体で使用されます。
たとえば、次のコードを見てみましょう:
struct Distance{
int feet;
float inch;
};
int main() {
struct Distance d1, d2;
}
typedef
を使用できます 簡略化された構文で同等のコードを書くには:
typedef struct Distance {
int feet;
float inch;
} distances;
int main() {
distances d1, d2;
}
例 2:C++ の typedef
#include <stdio.h>
#include <string.h>
// struct with typedef person
typedef struct Person {
char name[50];
int citNo;
float salary;
} person;
int main() {
// create Person variable
person p1;
// assign value to name of p1
strcpy(p1.name, "George Orwell");
// assign values to other p1 variables
p1.citNo = 1984;
p1. salary = 2500;
// print struct variables
printf("Name: %s\n", p1.name);
printf("Citizenship No.: %d\n", p1.citNo);
printf("Salary: %.2f", p1.salary);
return 0;
}
出力
Name: George Orwell Citizenship No.: 1984 Salary: 2500.00
ここでは、typedef
を使用しています。 Person
で エイリアス person
を作成するための構造 .
// struct with typedef person
typedef struct Person {
// code
} person;
Person
を宣言するだけです。 person
を使用した変数 エイリアス:
// equivalent to struct Person p1
person p1;
ネストされた構造
C プログラミングでは、構造体内に構造体を作成できます。たとえば、
struct complex {
int imag;
float real;
};
struct number {
struct complex comp;
int integers;
} num1, num2;
imag を設定したいとします。 num2 個中 変数を 11 に .方法は次のとおりです。
num2.comp.imag = 11;
例 3:C++ のネストされた構造体
#include <stdio.h>
struct complex {
int imag;
float real;
};
struct number {
struct complex comp;
int integer;
} num1;
int main() {
// initialize complex variables
num1.comp.imag = 11;
num1.comp.real = 5.25;
// initialize number variable
num1.integer = 6;
// print struct variables
printf("Imaginary Part: %d\n", num1.comp.imag);
printf("Real Part: %.2f\n", num1.comp.real);
printf("Integer: %d", num1.integer);
return 0;
}
出力
Imaginary Part: 11 Real Part: 5.25 Integer: 6
C で構造体を使用する理由
人物に関する情報 (名前、市民権番号、給与) を保存するとします。さまざまな変数 name を作成できます , citNo そして給料 この情報を保存します。
複数の人の情報を保存する必要がある場合はどうしますか?ここで、1 人あたりの情報ごとに異なる変数を作成する必要があります:name1 , citNo1 , 給与1 , name2 , citNo2 , salary2 など
より良いアプローチは、すべての関連情報のコレクションを 1 つの名前 Person
で持つことです。 構造化して、すべての人に使用してください。
構造体の詳細
- 構造とポインタ
- 構造体を関数に渡す
C言語