C では、ある構造を別の構造内にネストする機能が提供されており、これを使用して複雑なデータ型が作成されます。たとえば、エンティティの従業員の住所を構造体に保存する必要がある場合があります。属性アドレスには、番地、都市、州、PIN コードなどのサブパートが含まれる場合もあります。したがって、従業員のアドレスを格納するには、従業員のアドレスを別の構造体に格納し、その構造体アドレスを構造体従業員にネストする必要があります。次のプログラムを考えてみましょう。
#include struct address { char city[20]; int pin; char phone[14]; }; struct employee { char name[20]; struct address add; }; void main () { struct employee emp; printf('Enter employee information? '); scanf('%s %s %d %s',emp.name,emp.add.city, &emp.add.pin, emp.add.phone); printf('Printing the employee information.... '); printf('name: %s City: %s Pincode: %d Phone: %s',emp.name,emp.add.city,emp.add.pin,emp.add.phone); }
出力
Enter employee information? Arun Delhi 110001 1234567890 Printing the employee information.... name: Arun City: Delhi Pincode: 110001 Phone: 1234567890
この構造は次の方法でネストできます。
- セパレート構造により
- 埋め込み構造による
1) セパレート構造
ここでは 2 つの構造体を作成しますが、依存する構造体はメイン構造体の内部でメンバーとして使用する必要があります。次の例を考えてみましょう。
struct Date { int dd; int mm; int yyyy; }; struct Employee { int id; char name[20]; struct Date doj; }emp1;
ご覧のとおり、doj (参加日) は Date 型の変数です。ここでは doj が Employee 構造体のメンバーとして使用されます。このようにして、Date 構造を多くの構造で使用できます。
2) 埋め込み構造
埋め込み構造を使用すると、構造の内部で構造を宣言できます。したがって、必要なコード行は少なくなりますが、複数のデータ構造で使用することはできません。次の例を考えてみましょう。
struct Employee { int id; char name[20]; struct Date { int dd; int mm; int yyyy; }doj; }emp1;
入れ子構造へのアクセス
以下に示すように、Outer_Structure.Nested_Structure.member によって入れ子構造のメンバーにアクセスできます。
e1.doj.dd e1.doj.mm e1.doj.yyyy
C 入れ子構造の例
C言語の入れ子構造の簡単な例を見てみましょう。
#include #include struct Employee { int id; char name[20]; struct Date { int dd; int mm; int yyyy; }doj; }e1; int main( ) { //storing employee information e1.id=101; strcpy(e1.name, 'Sonoo Jaiswal');//copying string into char array e1.doj.dd=10; e1.doj.mm=11; e1.doj.yyyy=2014; //printing first employee information printf( 'employee id : %d ', e1.id); printf( 'employee name : %s ', e1.name); printf( 'employee date of joining (dd/mm/yyyy) : %d/%d/%d ', e1.doj.dd,e1.doj.mm,e1.doj.yyyy); return 0; }
出力:
employee id : 101 employee name : Sonoo Jaiswal employee date of joining (dd/mm/yyyy) : 10/11/2014
構造体を関数に渡す
他の変数と同様に、構造体も関数に渡すことができます。構造体のメンバーを関数に渡すことも、構造体変数を一度に渡すこともできます。構造体変数employeeを従業員の詳細を表示するために使用される関数display()に渡す次の例を考えてみましょう。
#include struct address { char city[20]; int pin; char phone[14]; }; struct employee { char name[20]; struct address add; }; void display(struct employee); void main () { struct employee emp; printf('Enter employee information? '); scanf('%s %s %d %s',emp.name,emp.add.city, &emp.add.pin, emp.add.phone); display(emp); } void display(struct employee emp) { printf('Printing the details.... '); printf('%s %s %d %s',emp.name,emp.add.city,emp.add.pin,emp.add.phone); }