Cにおける構造体と共用体の違い

構造とは?

構造体は、異なるデータ型の論理的に関連するデータ項目を結合する、C プログラミング言語のユーザー定義データ型です。

すべての構造要素は、連続したメモリ位置に格納されます。 構造体型変数は、さまざまなデータ型の複数のデータ項目を XNUMX つの名前で格納できます。

ユニオンとは

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 つのデータ メンバーがあります: 2) name (文字列)、3) roll_no (整数)、XNUMX) マーク (float)。

この後、生徒の情報を保存し、コンピュータ画面に表示するための構造体変数 sdt が作成されます。

出力:

次の情報を入力します。

生徒の名前を入力してください: James

学生名簿番号を入力してください: 21

学生の点数を入力してください: 67

入力した情報は次のとおりです。

生徒名:ジョン

学生名簿番号: 21

生徒の得点: 67.0

Union 宣言の構文

union [name of union]
    {
       type member1;
       type member2;
       type member3;
    };

共用体は、「union」キーワードと共用体名を使用して宣言されます。 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

a

上記のプログラムでは、x と y の値が破損していることがわかります。 変数 ch のみが期待される結果を出力します。 これは、結合すると、メモリの場所がすべてのメンバー データ型間で共有されるためです。

したがって、値が現在格納されている唯一のデータ メンバーがメモリ領域を占有します。 変数 ch の値が最後に保存されたので、残りの値は variables 失われています。

構造と構造連合

構造と構造連合
構造と構造連合

構造体と共用体の重要な違いは次のとおりです。

Structure Union
struct キーワードを使用して構造体を定義できます。 Union キーワードを使用して共用体を定義できます。
構造内のすべてのメンバーには、一意のメモリ位置が割り当てられます。 Union では、メモリ位置がすべてのデータ メンバーによって共有されます。
XNUMX つのデータ メンバーの値を変更しても、構造内の他のデータ メンバーには影響しません。 XNUMX つのデータ メンバーの値を変更すると、結合内の他のデータ メンバーの値も変更されます。
これにより、複数のメンバーを一度に初期化できます。 これにより、union の最初のメンバーのみを初期化できます。
構造体の合計サイズは、すべてのデータ メンバーのサイズの合計です。 共用体の合計サイズは、最大のデータ メンバーのサイズです。
主にさまざまなデータ型を保存するために使用されます。 これは主に、利用可能な多くのデータ型のうちの XNUMX つを保存するために使用されます。
これは、内部パラメータに記述された各メンバーのスペースを占有します。 内部パラメータに記述された最大サイズのメンバーのスペースを占有します。
一度に任意のメンバーを取得できます。 ユニオンでは一度に XNUMX つのメンバーにアクセスできます。
柔軟な配列をサポートします。 フレキシブル配列はサポートしていません。

構造上のメリット

構造を使用する利点は次のとおりです。

  • 構造体は、同じ主題に関する複数のデータを同じ場所に集めます。
  • これは、名、姓などの類似したデータ型とパラメータのデータを収集する場合に役立ちます。
  • 単一の名前を使用してレコード全体を表すことができるため、保守が非常に簡単です。
  • 構造的には、単一のパラメーターを使用して、レコードの完全なセットを任意の関数に渡すことができます。
  • 構造体の配列を使用して、同様のタイプのレコードをさらに保存できます。

組合のメリット

Union を使用するメリットと利点は次のとおりです。

  • 構造体に比べて占有メモリが少なくなります。
  • Union を使用すると、最後の変数のみに直接アクセスできます。
  • Union は、XNUMX つ以上のデータ メンバーに同じメモリ位置を使用する必要がある場合に使用されます。
  • これにより、XNUMX つのデータ メンバーのみのデータを保持できます。
  • 割り当てられた領域は、データ メンバーの最大サイズと等しくなります。

構造上のデメリット

構造を使用する場合の短所/欠点は次のとおりです。

  • IT プロジェクトの複雑さが限界を超えると、管理が困難になります。
  • コード内の XNUMX つのデータ構造を変更すると、他の多くの場所の変更が必要になります。 したがって、変更を追跡するのが困難になります。
  • すべてのデータを保存するためのストレージスペースが必要なため、構造は遅くなります。
  • 構造体では一度に任意のメンバーを取得できますが、共用体では一度に XNUMX つのメンバーにアクセスできます。
  • 構造体は内部パラメータに書き込まれたすべてのメンバーのスペースを占有しますが、ユニオンは内部パラメータに書き込まれた最大サイズのメンバーのスペースを占有します。
  • 柔軟な配列をサポートする構造。 Union はフレキシブル配列をサポートしていません。

組合のデメリット

Union を使用する場合の短所/欠点は次のとおりです。

  • 一度に使用できるユニオン メンバーは XNUMX 人だけです。
  • すべての共用体変数を初期化したり、一度にさまざまな値を使用したりすることはできません。
  • Union は、すべてのメンバーに XNUMX つの共通の保管スペースを割り当てます。

主な違い:

  • 構造内のすべてのメンバーには一意のメモリ位置が割り当てられますが、結合すると、メモリ位置はすべてのデータ メンバーによって共有されます。
  • XNUMX つのデータ メンバーの値を変更しても、構造体の他のデータ メンバーには影響しませんが、XNUMX つのデータ メンバーの値を変更すると、結合体の他のデータ メンバーの値も変更されます。
  • Structure は主にさまざまなデータ型を格納するために使用され、union は主に多くのデータ型の XNUMX つを格納するために使用されます。
  • 構造体では一度に任意のメンバーを取得できますが、ユニオンでは一度に XNUMX つのメンバーにアクセスできます。
  • Structure は柔軟な配列をサポートしますが、union は柔軟な配列をサポートしません。

初心者向けの C チュートリアルもチェックしてください:- ここをクリック