Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ Unions | 構造体とメモリの理解
C構造体
セクション 3.  3
single

single

Unions

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

Note
定義

ユニオンは、C言語におけるユーザー定義のデータ型であり、構造体と似ています。主な違いは、すべてのメンバーが同じメモリ領域を共有する点です。任意の時点で、1つのメンバーのみが値を保持できます。

ユニオンは使用頻度は高くありませんが、メモリを節約しつつ、異なる型のデータを異なるタイミングで保持したい場合に便利です。

すべてのメンバーのデータは同じメモリ領域に配置される。 つまり、ユニオンのすべてのメンバーは同じメモリアドレスを共有し、ユニオンのサイズは最も大きいメンバーのサイズと等しい

struct+vs+union

ユニオンの主な用途は、異なるデータ型を1つの共通メモリ領域に重ね合わせることであり、1つのメモリ領域を異なるデータ型として表現すること。

ユニオンではフィールドが同じメモリセル内にあるため、同じデータを異なる方法で処理することが可能です。

main.c

main.c

12345678910111213141516
#include <stdio.h> // declaring a union union Data { int a; char b; } data; int main() { data.a = 77; // assigning a value to variable a printf("Value of data.a: %d\n", data.a); printf("Value of data.b: %c\n", data.b); return 0; }

この例では、変数 data.adata.b は同じメモリを共有しています。a に値 77 を代入しましたが、同じバイト列を b で文字として解釈することができます。

共用体におけるアライメント

構造体と同様に、共用体もアライメントとパディングを使用。コンパイラは、各メンバーが適切なメモリ境界で開始されるように追加のバイトを挿入する場合がある。

main.c

main.c

12345678910111213
#include <stdio.h> union Data { int a; // 4 bytes double b; // 8 bytes char c[20]; // 20 bytes }; int main() { printf("Size of union Data: %zu bytes\n", sizeof(union Data)); return 0; }

共用体は一度に1つの値のみを格納でき、そのサイズは最も大きいメンバーのサイズに等しい。int a(4バイト)、double b(8バイト)、char c[20]を持つ例では、共用体の最小サイズは20バイト。ただし、コンパイラがアライメントのために追加のバイトを挿入し、doubleintが適切なメモリ境界で開始されるようにする。その結果、sizeof(union Data)は20より大きくなる場合があり、例えば24バイトとなることがある。

タスク

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

ユニオン Data は各値を int として格納し、同じ値に char としてアクセスできるようにします。この関数は配列を反復処理し、各値を整数と対応するASCII文字の両方で出力します。

関数は2つのパラメータを受け取ります:整数の配列(values)とその長さ(n)。

  1. 2つのメンバー union Dataint a を持つ char b を使用。
  2. for ループで配列要素を0からnまで反復処理。
  3. 配列の現在の要素をユニオンの int メンバー(data.a)に代入。
  4. 整数値 data.a と文字表現 data.b を出力。

{65, 66, 67, 68, 69} =>

Value as int: 65, Value as char: A
Value as int: 66, Value as char: B
Value as int: 67, Value as char: C
Value as int: 68, Value as char: D
Value as int: 69, Value as char: E

解答

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

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

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

セクション 3.  3
single

single

AIに質問する

expand

AIに質問する

ChatGPT

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

some-alt