構造体の初期化
CoddyのCジャーニー「Logic & Flow」セクションの一部 — レッスン 42/63。
構造体変数を作成し、そのメンバに個別に値を代入することもできますが、C言語には初期値を設定するためのより便利な方法が用意されています。波括弧で囲まれた初期化子リストを使用して、宣言時に構造体変数を初期化できます。
構造体の初期化の構文は次のとおりです:
struct StructureName variableName = {value1, value2, ...};作成した Point 構造体の例を使用すると、次のように1行で簡潔に宣言と初期化を行うことができます:
struct Point p1 = {10, 20};これにより、xを10に、yを20に設定した、p1という名前のPoint変数が作成されます。初期化子リストの値は、構造体の定義で宣言された順序で構造体のメンバに割り当てられます。
この初期化手法は、個別の代入を行うよりも簡潔であるだけでなく、構造体がランダムなゴミデータではなく意味のある値で開始されることを保証します。これは、コンパイル時に初期値がわかっており、すぐに使用可能な構造体変数を効率的に作成したい場合に特に便利です。
チャレンジ
簡単初期化子リストを使用した構造体の初期化を実演するCプログラムを作成してください。プログラムは以下のことを行う必要があります:
- 以下のメンバを持つ
struct名前Employeeを定義します:- 従業員IDを格納するための整数型の
id - 部署名を格納するためのサイズ15の文字配列
department - 勤続年数を格納するための整数型の
yearsOfService - 従業員の給与を格納するための浮動小数点型の
salary
- 従業員IDを格納するための整数型の
- 初期化子リストを使用して、以下のデータを持つ3つの
Employee変数を作成します:emp1: ID 101, 部署 "Engineering", 勤続年数 5年, 給与 75000.50emp2: ID 102, 部署 "Marketing", 勤続年数 3年, 給与 65000.25emp3: ID 103, 部署 "Sales", 勤続年数 8年, 給与 80000.75
- 各従業員の情報を次の正確な形式で出力します:
Employee 1:ID: [id]Department: [department]Years of Service: [yearsOfService]Salary: [salary]Employee 2:ID: [id]Department: [department]Years of Service: [yearsOfService]Salary: [salary]Employee 3:ID: [id]Department: [department]Years of Service: [yearsOfService]Salary: [salary]
- 3人全員の合計給与を
Total Salary: [total]の形式で計算して出力します。 - 平均勤続年数を
Average Years of Service: [average]の形式で計算して出力します。
このチャレンジでは、構造体変数を1行で宣言して初期化する、初期化子リストを使用した構造体の初期化についての理解をテストします。初期化子リストの値は、構造体定義でメンバが宣言されたのと同じ順序で提供される必要があります。
期待される出力は以下の通りです:
Employee 1:
ID: 101
Department: Engineering
Years of Service: 5
Salary: 75000.50
Employee 2:
ID: 102
Department: Marketing
Years of Service: 3
Salary: 65000.25
Employee 3:
ID: 103
Department: Sales
Years of Service: 8
Salary: 80000.75
Total Salary: 220001.50
Average Years of Service: 5.33チートシート
構造体変数は、宣言時に波括弧で囲まれた初期化子リストを使用して初期化できます。
struct StructureName variableName = {value1, value2, ...};Point構造体の例:
struct Point p1 = {10, 20};初期化子リスト内の値は、構造体の定義で宣言された順序で構造体のメンバに割り当てられます。この方法は、個別に代入を行うよりも簡潔であり、構造体がランダムなガベージデータではなく、意味のある値で開始されることを保証します。
自分で試してみよう
#include <stdio.h>
// TODO: ここでEmployee構造体を定義します
int main() {
// TODO: 初期化子リストを使用して3つのEmployee変数を作成します
// TODO: 各従業員の情報を表示します
// TODO: 合計給与と平均勤続年数を計算して表示します
return 0;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。