構造と連合の違い

Anonim

構造体と共用体はC言語のユーザー定義データ型であり、概念的には同じですが、メモリがメンバに割り当てられる方法など、いくつかの点でまだ異なります。同様に宣言されていますが、機能は異なります。ユーザーは、1つの名前で異なるデータ型を組み合わせることができます。構造体変数を宣言するときは、各メンバに別々のメモリ位置が使用されますが、共用体変数の異なるメンバは同じメモリ位置を共有します。構造と組合の違いを学びましょう。

<! - 1 - >

構造とは何ですか?

構造体は、Cの別のユーザー定義データ型で、ユーザーがさまざまな種類のデータ型をメモリブロック内の単一の型に結合することを可能にします。構造体には、相互に関連する単純なデータ型と複雑なデータ型の両方を含めることができます。それ以外の場合は意味をなさないでしょう。構造内の各メンバーは、いつでもアクセスして取得できるように、独自のメモリー位置を取得します。

<! - 2 - >

1つの連絡先に関するすべての情報(名前、住所、電話番号など)を格納しているブックまたはアドレス帳の多くのメンバーに関する情報を格納するディレクトリのように、連絡先などが含まれます。各メンバのアドレスは昇順になります。つまり、各メンバのメモリは異なるオフセット値で開始されます。あるメンバーの価値を変更しても、他のメンバーには影響しません。

<! - 3 - >

'struct'キーワードは、単一の名前で異なるデータ型の構造を定義するために使用されます。たとえば、従業員データベースを作成する場合は、従業員の名前、年齢、電話番号、給与の詳細を1つのエンティティに格納する必要があります。これはキーワード 'struct'によって行われ、構造体が宣言されたことをコンパイラに伝えます。

struct employee {

string name;

ストリングス年齢。

ストリング電話。

ストリング給与;

} emp1、emp2;

ここで、 'employee'は構造体の名前で、 'employee'型の2つの変数 'emp1'と 'emp2'が作成されます。閉じ括弧の後ろには、セミコロン(;)を続ける必要があります。

構造体のメンバには、2種類の演算子でアクセスできます。

  1. メンバ演算子
  2. 構造体ポインタ演算子

連合とは?

Cで使用される特殊なデータ型で、異なる種類のデータ型を同じメモリ位置に格納することができます。共用体は構造体に非常によく似ており、キーワード 'struct'をキーワード 'union'に置き換えることで定義できます。メンバーは、組合の中でお互いの記憶を覆い、それはすべてのメンバーに合う大きさです。

変数が共用体に関連付けられている場合、コンパイラーは最大メモリーのサイズを考慮してメモリーを割り振ります。したがって、共用体のサイズは最大のデータ・メンバーのサイズに等しくなります。ユニオンは多くのメンバで定義することができますが、指定された任意のインスタンスで値を保持するメンバは1つだけです。

アドレスは、すべてのメンバーが同じオフセット値で開始することを意味する、すべてのユニオンメンバーに対して同じです。そして、あるメンバーの価値を変えることは、他のメンバーの価値に影響します。ユニオンは、いくつかのデータ型のうちの1つを格納するときに使用できます。

組合員{ char name [32];

年齢。

浮動給与;

};

ここでキーワード 'union'は、構造の宣言と非常によく似た結合を定義します。変数には、「従業員の名前」である文字列値、「従業員の年齢」である整数値、または「従業員の給与」を表す浮動小数点値を格納できます。

構造と連合の違い

1。キーワード

キーワード 'struct'は構造体の定義に使用され、 'union'キーワードは共用体の定義に使用されます。 2。メモリ割り当て

構造内のメンバには別のメモリ空間が割り当てられ、メンバにはメモリを共有しない異なるアドレスが割り当てられます。一方、共用体は、すべてのメンバに対して同じメモリ空間を共有し、共有メモリの場所が割り当てられます。 3。メンバアクセス

ユニオンは、一度に1つの値だけを格納し、すべてのメンバが同時にアクセスできるようにします。構造体には複数の値を格納できますが、任意のメンバー値にいつでもアクセスして取得できます。 4。サイズ

構造体のサイズは、すべてのメンバーのサイズの合計以上ですが、ユニオンのサイズは最大サイズのメンバーのサイズと同じです。 5。初期化(Initialization)構造体では、いくつかのメンバを一度に初期化することができ、一方、共用体では、最初のメンバのみをその型の値で初期化することができる。 5。値

構造体はすべてのメンバーの異なる値を格納することができ、1つのメンバーの値の変更は他のメンバーの値に影響しません。組合はすべてのメンバーに対して同じ価値を保管し、一方のメンバーの価値の変化は他のメンバーの価値に影響します。

構造と組合

構造

組合

構造キーワードは、構造を定義するために使用されます。

Unionキーワードは、共用体を定義するために使用されます。

メンバーは構造内のメモリを共有しません。

メンバは、共用体のメモリ空間を共有します。

任意のメンバーは、構造内のいつでも検索できます。

組合では一度にアクセスできるメンバーは1人だけです。 構造体のいくつかのメンバーを一度に初期化することができます。
最初のメンバのみを初期化できます。 構造体のサイズは、各メンバのサイズの合計に等しい。
共用体のサイズは、最大のメンバーのサイズに等しい。 あるメンバーの値を変更しても、別のメンバーの値には影響しません。
あるメンバーの値の変更は、他のメンバーの値に影響します。 すべてのメンバーに異なる値を格納します。
すべてのメンバーに同じ値を格納します。まとめ 構造体と共用体は、Cのユーザ定義データ型であり、機能的にも概念的にも同じですが、いくつかの点ではかなり異なっています。両方には異なるデータ型の変数が含まれていますが、変数の宣言とメンバーへのアクセスには同じ構文が使用されます。構造体は 'struct'キーワードで定義されますが、共用体はキーワード 'union'で定義されます。
各メンバは、構造体内で別々のメモリ位置を取得しますが、ユニオンでは、合計メモリ空間が最大サイズメンバに相当します。すべてのメンバーが同じメモリ空間を共有しています。 任意のシーケンスの任意のメンバは構造体でアクセスできますが、ユニオンでは、その変数のみがアクセス可能で、その値は最近格納されています。