構造体メンバへのアクセス
CoddyのCジャーニー「Logic & Flow」セクションの一部 — レッスン 41/63。
構造体変数を作成できるようになったので、その中に格納されているデータを操作する方法を学ぶ必要があります。ドット演算子 (.) は、構造体変数の個々のメンバにアクセスして変更するための鍵となります。
構造体のメンバにアクセスするための構文は単純です:
structVariable.memberNameこのPoint構造体の例を使用すると、そのメンバの読み取りと書き込みの両方を行うことができます:
struct Point p1;
// 構造体メンバへの書き込み
p1.x = 10;
p1.y = 20;
// 構造体メンバからの読み取り
printf("Point coordinates: (%d, %d)\n", p1.x, p1.y);ドット演算子は、他の変数へのアクセスと全く同じように機能します。代入、算術演算、関数呼び出し、またはその型の通常の変数を使用するあらゆる場所で使用できます。各メンバは宣言された型の独立した変数として動作するため、構造体のデータを整理された直感的な方法で操作できます。
チャレンジ
簡単ドット演算子を使用して構造体のメンバにアクセスし、変更する方法を示すCプログラムを作成してください。プログラムは以下の手順に従う必要があります:
- 以下のメンバを持つ
Carという名前のstructを定義します:- 製造年を格納するための整数型の
year - 車のブランドを格納するためのサイズ20の文字配列
brand - 現在の走行距離を格納するための整数型の
mileage - 車の価格を格納するための浮動小数点型の
price
- 製造年を格納するための整数型の
myCarという名前のCar変数を作成します- 以下の入力値を読み取り、ドット演算子を使用して構造体のメンバに代入します:
- 製造年の整数を読み取り、
myCar.yearに代入します - ブランドの文字列を読み取り、
myCar.brandに代入します - 走行距離の整数を読み取り、
myCar.mileageに代入します - 価格の浮動小数点数を読み取り、
myCar.priceに代入します
- 製造年の整数を読み取り、
- すべての値を読み取った後、以下の操作を実行します:
myCar.mileage += 1000;を使用して走行距離を1000増やしますmyCar.price -= 500.0;を使用して価格を500.0減らします
- ドット演算子を使用して各メンバにアクセスし、以下の正確な形式で車の情報を出力します:
Car Details:Year: [year]Brand: [brand]Mileage: [mileage]Price: [price]
このチャレンジでは、構造体メンバの読み取りと書き込みの両方におけるドット演算子の理解をテストします。構造体メンバへの値の代入、それらに対する算術演算の実行、および出力のためのアクセスを練習します。
例えば、入力が以下の場合:
2020
Toyota
50000
25000.50出力は以下のようになる必要があります:
Car Details:
Year: 2020
Brand: Toyota
Mileage: 51000
Price: 24500.50チートシート
ドット演算子 (.) は、構造体変数の個々のメンバにアクセスしたり、変更したりするために使用されます。
構造体メンバにアクセスするための構文:
structVariable.memberName構造体メンバの読み取りと書き込みの例:
struct Point p1;
// 構造体メンバへの書き込み
p1.x = 10;
p1.y = 20;
// 構造体メンバからの読み取り
printf("Point coordinates: (%d, %d)\n", p1.x, p1.y);ドット演算子は、代入、算術演算、関数呼び出し、またはその型の通常の変数を使用するあらゆる場所で使用できます。各メンバは、宣言された型の独立した変数として動作します。
自分で試してみよう
#include <stdio.h>
#include <string.h>
// TODO: ここでCar構造体を定義します
int main() {
// TODO: myCarという名前のCar変数を作成します
// 入力値を読み取ります
int year;
char brand[20];
int mileage;
float price;
scanf("%d", &year);
scanf("%s", brand);
scanf("%d", &mileage);
scanf("%f", &price);
// TODO: ドット演算子を使用して、入力値を構造体のメンバに代入します
// TODO: 指定された通りに走行距離と価格を修正します
// TODO: ドット演算子を使用して車の詳細を表示します
printf("Car Details:\n");
// ここで年式、ブランド、走行距離、価格を表示します
return 0;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。