Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ ネストされた構造体 | 高度な構造体の活用
C構造体
セクション 4.  1
single

single

ネストされた構造体

メニューを表示するにはスワイプしてください

C では、構造体は int や char などの基本型、配列、ポインタに加えて、他の構造体をメンバーとして含めることができます。ネストされた構造体は、関連するデータを論理的にまとめたい場合に便利です。

埋め込みネスト構造体

埋め込みネスト構造体は、外側の構造体の内部で直接宣言されます。これは、ネストされた構造体が外側の構造体内でのみ存在し、他の場所では使用できないことを意味します。

main.c

main.c

123456789101112131415161718192021
#include <stdio.h> struct Person { char name[50]; int age; struct Address { char street[50]; char city[50]; char index[10]; } address; // embedded nested structure }; int main() { struct Person person = { "Sherlock Holmes", 27, {"Baker Street", "London", "221B"} }; printf("Name: %s\n", person.name); printf("Age: %d\n", person.age); printf("Address: %s, %s, %s\n", person.address.index, person.address.street, person.address.city); return 0; }

この例では、Address構造体がPersonの内部で定義されているため、AddressはPerson構造体のコンテキスト内でのみ存在します。ネストされた構造体のフィールドにはperson.addressを使ってアクセスでき、streetcityindexを取得できます。この方法は、ネストされたデータが特定の外部構造体専用で、他で再利用する必要がない場合に便利です。

独立したネスト構造体

独立したネスト構造体は個別に宣言され、その後外部構造体に含められます。これにより、ネスト構造体を複数の外部構造体で再利用したり、個別にインスタンス化したりすることができます。

main.c

main.c

123456789101112131415161718192021222324
#include <stdio.h> struct Address { char street[50]; char city[50]; char index[10]; }; struct Person { char name[50]; int age; struct Address address; // nested structure }; int main() { struct Address addr = {"Baker Street", "London", "221B"}; struct Person person = {"Sherlock Holmes", 27, addr}; printf("Name: %s\n", person.name); printf("Age: %d\n", person.age); printf("Address: %s, %s, %s\n", person.address.index, person.address.street, person.address.city); return 0; }

ここでは、AddressPerson とは独立して宣言されているため、単独で、または複数の構造体内で使用することができます。Person を初期化する際には、Address フィールドに address インスタンスを割り当てます。ネストされたフィールドへのアクセスも person.address を使って同様に行います。この方法は柔軟性が高く、コードの再利用やモジュール設計を促進します。

タスク

スワイプしてコーディングを開始

各製品は、ネストされた構造体 Product を含む構造体 Manufacturer で表現されます。関数は製品の配列を走査し、指定されたメーカーに属する製品かどうかを確認し、一致するすべての製品の合計値(price * quantity)を合計します。

戻り値の型が calculateManufacturerTotal の関数 float を実装してください。

  1. 関数内で、float 型の変数 total0.0f で初期化します。
  2. for ループを使用して、製品配列を 0 から n まで反復します。
  3. 各製品について、manufacturer.companyName を用いて製品の companyNamestrcmp パラメータを比較します。
  4. 一致した場合、price * quantitytotal に加算します。
  5. 最終的な total の値を返します。

解答

Switch to desktop実践的な練習のためにデスクトップに切り替える下記のオプションのいずれかを利用して、現在の場所から続行する
すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 4.  1
single

single

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

some-alt