共用体・union/構造体との違い
スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
構造体は、複数の異なるデータ型のメンバから構成された、新しいデータ型を定義するために使用します。
構造体のメンバは、それぞれが独自に記憶領域を確保します。
スポンサーリンク
構造体
struct structure { int width; float height; };
————-
| width |
————-
| height |
————-
構造体は、メンバがそれぞれの記憶域を確保する。
共用体
共用体は、構造体に似てはいますが、複数のメンバが一つの記憶域を確保します。
共用体の定義には、unionを用います。
union common { int width; float height; };
——————-
| width/height |
——————-
共用体は、複数のメンバが同じ領域を共有する。
構造体と共用体の違い
構造体の場合、メンバはそれぞれの記憶領域に割り当てられるため、メンバ同士はまったく無関係となります。
1つのメンバの値を変更しても、他のメンバへの影響はなく変化しません。
一方、共用体は、すべてのメンバが同じ領域に割り当てられているため、一度に1つのみのメンバが有効となります。
つまり、widthになにか値が代入してあった場合、新しくheightに値を代入すると、widthの値は消されてしまいます。
共用体の動作確認
#include <iostream> union common { int width; float height; } data; int w; float h; int main() { data.height = 10.0; // 次行のdata.width = 5により消される data.width = 5; // 有効な代入となる w = data.width; // 有効 h = data.height; // 無効 std::cout << w << "\n"; // 有効。ちゃんと出力される std::cout << h << "\n"; // 無効。変な出力になる return 0; }
実行結果。
5 7.00649e-045
スポンサーリンク
>> 次の記事 : typedef・変数型の定義
<< 前の記事 : 構造体・struct/構造体の宣言と初期化
スポンサーリンク