ストラクチャーとユニオンの違い
構造とは?
構造体は、異なるデータ型の論理的に関連するデータ項目を結合する C プログラミング言語のユーザー定義データ型です。
すべての構造要素は、連続したメモリ位置に格納されます。構造型変数は、さまざまなデータ型の複数のデータ項目を 1 つの名前で格納できます。
このチュートリアルでは、次のことを学びます:
- 構造とは?
- ユニオンとは
- 宣言構造の構文
- C プログラミングにおける構造の例
- 共用体宣言の構文
- C プログラミングにおける共用体の例
- 構造対。ユニオン
- 構造の利点
- ユニオンのメリット
- 構造の短所
- ユニオンのデメリット
連合とは
Union は、構造体と同様に、ユーザー定義のデータ型です。 Union は、異なるタイプとサイズのオブジェクトを結合します。ユニオン変数は、ユニオンの最大の変数を保持するためのスペースに等しいメモリ スペースを割り当てます。さまざまな種類のオブジェクトが同じ場所を共有できます。
構造宣言の構文
struct [name of the structure] { type member1; type member2; type member3; };
構造体は、「struct」キーワードと構造体の名前を使用して宣言されます。数値 1、数値 2、数値 3 は、構造体の個々のメンバーです。本文部分はセミコロン (;) で終了します。
C プログラミングにおける構造の例
#include <stdio.h> struct student { char name[60]; int roll_no; float marks; } sdt; int main() { printf("Enter the following information:\n"); printf("Enter student name: "); fgets(sdt.name, sizeof(sdt.name), stdin); printf("Enter student roll number: "); scanf("%d", & sdt. roll_no); printf("Enter students marks: "); scanf("%f", & sdt.marks); printf("The information you have entered is: \n"); printf("Student name: "); printf("%s", sdt.name); printf("Student roll number: %d\n", sdt. roll_no); printf("Student marks: %.1f\n", sdt.marks); return 0; }
上記のプログラムでは、student という構造体が作成されます。この構造体には、1) name (文字列)、2) roll_no (整数)、3) マーク (float) の 3 つのデータ メンバーがあります。
この後、構造体変数 sdt が作成され、生徒の情報が格納され、コンピューターの画面に表示されます。
出力:
次の情報を入力してください:
生徒の名前を入力してください:James
学生名簿番号を入力してください:21
学生の点数を入力してください:67
入力した情報は次のとおりです:
学生名:ジョン
生徒数:21
学生の点数:67.0
共用体宣言の構文
union [name of union] { type member1; type member2; type member3; };
ユニオンは、「ユニオン」キーワードとユニオンの名前を使用して宣言されます。ナンバー 1、ナンバー 2、ナンバー 3 は組合の個々のメンバーです。本文部分はセミコロン (;) で終了します。
C プログラミングにおける共用体の例
#include <stdio.h> union item { int x; float y; char ch; }; int main( ) { union item it; it.x = 12; it.y = 20.2; it.ch = 'a'; printf("%d\n", it.x); printf("%f\n", it.y); printf("%c\n", it.ch); return 0; }
出力:
1101109601
20.199892
上記のプログラムでは、x と y の値が壊れていることがわかります。変数 ch のみが期待される結果を出力します。これは、union では、メモリの場所がすべてのメンバー データ型で共有されるためです。
したがって、現在値が格納されている唯一のデータ メンバーがメモリ空間を占有します。変数 ch の値が最後に格納されたため、残りの変数の値は失われます。
構造対。ユニオン
構造体と共用体の重要な違いは次のとおりです:
構造 ユニオン struct キーワードを使用して構造体を定義できます。union キーワードを使用して共用体を定義できます。構造体内のすべてのメンバーに一意のメモリ位置が割り当てられます。共用体では、メモリ位置はすべてのデータ メンバーによって共有されます。値の変更1 つのデータ メンバーの値を変更しても、構造内の他のデータ メンバーには影響しません。1 つのデータ メンバーの値を変更すると、ユニオン内の他のデータ メンバーの値が変更されます。一度に複数のメンバーを初期化できます。最初のメンバーのみを初期化できます。構造体の合計サイズは、すべてのデータ メンバーのサイズの合計です。ユニオンの合計サイズは、最大のデータ メンバーのサイズです。主に、さまざまなデータ型を格納するために使用されます。使用可能な多くのデータ型の 1 つを格納します。内部パラメーターに書き込まれたすべてのメンバーのスペースを占有します。内部パラメーターに最大サイズが書き込まれたメンバーのスペースを占有します。一度に任意のメンバーを取得できます。次のことができます。 1 つのメンバーにアクセスする柔軟な配列をサポートしています。柔軟な配列はサポートしていません。構造の利点
構造を使用することの長所/利点は次のとおりです:
- 構造は、同じ主題に関する複数のデータを同じ場所にまとめて収集します。
- 名前、姓など、類似したデータ タイプとパラメータのデータを収集する場合に役立ちます。
- 単一の名前を使用してレコード全体を表すことができるため、管理が非常に簡単です。
- 構造上、単一のパラメータを使用して、レコードの完全なセットを任意の関数に渡すことができます。
- 構造の配列を使用して、同様のタイプのレコードをさらに保存できます。
組合の利点
ユニオンを使用することの長所/利点は次のとおりです:
- 構造体に比べてメモリ使用量が少ない
- 共用体を使用すると、最後の変数のみに直接アクセスできます。
- Union は、2 つ以上のデータ メンバーに同じメモリ ロケーションを使用する必要がある場合に使用されます。
- 1 つのデータ メンバーだけのデータを保持できます。
- 割り当てられたスペースは、データ メンバーの最大サイズと同じです。
構造の短所
構造体を使用する場合の短所/欠点は次のとおりです:
- IT プロジェクトの複雑さが限界を超えると、管理が難しくなります。
- コード内の 1 つのデータ構造を変更すると、他の多くの場所で変更が必要になります。したがって、変更を追跡するのが難しくなります。
- すべてのデータにストレージ スペースが必要なため、構造が遅くなります。
- 構造体では一度に任意のメンバーを取得できますが、共用体では一度に 1 つのメンバーにアクセスできます。
- 構造体は、内部パラメーターに記述されたすべてのメンバーのスペースを占有しますが、共用体は、内部パラメーターに記述された最大サイズのメンバーのスペースを占有します。
- Structure は柔軟な配列をサポートします。 Union は柔軟な配列をサポートしていません。
ユニオンのデメリット
ユニオンを使用する場合の短所/欠点は次のとおりです:
- 一度に使用できるユニオン メンバーは 1 人だけです。
- すべてのユニオン変数を初期化したり、一度にさまざまな値で使用したりすることはできません。
- ユニオンは、すべてのメンバーに 1 つの共通ストレージ スペースを割り当てます。
主な違い:
- 構造内の各メンバーには一意のメモリ ロケーションが割り当てられますが、共用体ではメモリ ロケーションがすべてのデータ メンバーによって共有されます。
- 1 つのデータ メンバーの値を変更しても、構造内の他のデータ メンバーには影響しませんが、1 つのデータ メンバーの値を変更しても、ユニオン内の他のデータ メンバーの値は変更されます。
- 構造体は主にさまざまなデータ型を格納するために使用され、ユニオンは主に多くのデータ型の 1 つを格納するために使用されます。
- 構造上、一度に任意のメンバーを取得できますが、ユニオンでは、一度に 1 つのメンバーにアクセスできます。
- 構造体は柔軟な配列をサポートしていますが、共用体は柔軟な配列をサポートしていません。
C言語