【C言語】第6章第2回:構造体の初期化とアクセス方法
構造体の初期化とそのメンバーへのアクセスは、C言語プログラミングで非常に重要なスキルです。この章では、初期化の方法やメンバーへのアクセス方法について詳しく解説します。
1. 構造体の初期化方法
1.1 リテラルを使った初期化
構造体をリテラルで初期化する簡単な方法を紹介します。
#include <stdio.h>
// 構造体の定義
typedef struct {
char name[50];
int age;
float grade;
} Student;
int main() {
// 構造体のリテラル初期化
Student student1 = {"Alice", 20, 88.5};
// データの表示
printf("Name: %s\n", student1.name);
printf("Age: %d\n", student1.age);
printf("Grade: %.2f\n", student1.grade);
return 0;
}
解説:
- 構造体変数を定義すると同時に初期値を指定します。
- データは定義順に割り当てられます。
1.2 メンバー指定による初期化
メンバーを指定して初期化する方法を紹介します。
#include <stdio.h>
// 構造体の定義
typedef struct {
char name[50];
int age;
float grade;
} Student;
int main() {
// メンバー指定による初期化
Student student1 = {.name = "Bob", .grade = 75.5, .age = 22};
// データの表示
printf("Name: %s\n", student1.name);
printf("Age: %d\n", student1.age);
printf("Grade: %.2f\n", student1.grade);
return 0;
}
解説:
- メンバーを指定して初期化することで、順序に関係なく値を設定できます。
- 指定しないメンバーはデフォルト値(0または空文字列)になります。
2. 構造体メンバーへのアクセス
2.1 ドット演算子によるアクセス
構造体変数のメンバーにアクセスする基本的な方法です。
#include <stdio.h>
// 構造体の定義
typedef struct {
char name[50];
int age;
float grade;
} Student;
int main() {
Student student1 = {"Charlie", 19, 90.0};
// ドット演算子を使ったアクセス
printf("Name: %s\n", student1.name);
printf("Age: %d\n", student1.age);
printf("Grade: %.2f\n", student1.grade);
return 0;
}
2.2 ポインタを使ったアクセス
構造体のポインタを使ってメンバーにアクセスする方法です。
#include <stdio.h>
// 構造体の定義
typedef struct {
char name[50];
int age;
float grade;
} Student;
int main() {
Student student1 = {"Dave", 21, 85.0};
Student *ptr = &student1;
// ポインタを使ったアクセス
printf("Name: %s\n", ptr->name);
printf("Age: %d\n", ptr->age);
printf("Grade: %.2f\n", ptr->grade);
return 0;
}
解説:
->
演算子を使用して、構造体ポインタのメンバーにアクセスします。- ポインタを使用すると、動的なデータ操作が可能になります。
3. 構造体のコピーと代入
3.1 構造体変数のコピー
構造体は直接コピーすることが可能です。
#include <stdio.h>
// 構造体の定義
typedef struct {
char name[50];
int age;
float grade;
} Student;
int main() {
Student student1 = {"Eve", 23, 88.0};
Student student2;
// 構造体のコピー
student2 = student1;
// コピー後のデータを表示
printf("Name: %s\n", student2.name);
printf("Age: %d\n", student2.age);
printf("Grade: %.2f\n", student2.grade);
return 0;
}
解説:構造体変数間で代入することで、簡単にコピーできます。
4. 練習問題
以下の課題に挑戦して、構造体の初期化とアクセス方法を理解しましょう。
- 本(タイトル、著者、価格)を管理する構造体を定義し、リテラルで初期化してデータを表示してください。
- 車(メーカー、モデル、価格)を管理する構造体を定義し、ポインタを使ってデータを操作してください。
- 2つの商品の情報を構造体でコピーし、価格を比較して安い方を表示してください。
5. 練習問題の解答と解説
問3の解答
#include <stdio.h>
// 構造体の定義
typedef struct {
char name[50];
float price;
} Product;
int main() {
// 構造体の初期化
Product product1 = {"Laptop", 750.0};
Product product2 = {"Tablet", 500.0};
// コピーと比較
Product cheaper = (product1.price < product2.price) ? product1 : product2;
printf("Cheaper product: %s, Price: %.2f\n", cheaper.name, cheaper.price);
return 0;
}
解説:構造体をコピーし、条件演算子を使って価格を比較しています。
6. まとめ
構造体の初期化とメンバーアクセス方法を理解することで、データ操作が効率的に行えるようになります。次回は、構造体の配列について学びます。