共用体は構造体のそっくりさんです
アレサ「数値、文字データのいれものとして
変数
配列
構造体
構造体の配列さんたちがおられました。
今日は そのお仲間として共用体さんに御登場いただきます。
それでは、 どうぞ
ささ、どうぞ」
共用体「よばれて とびでて 共用体ぃぃぃ~~んん」
アレサ「ようこそ 共用体さん
それでは
数値のいれものである
共用体さんがどのような仕組みとなっているかを
みていきますね。
共用体は構造体に非常にそっくりさんなんです。
共用体に変数をメンバ変数として格納する仕組みも
共用体の記述方法も
共用体変数宣言をおこない
共用体変数のメンバ変数に格納した数値データをprintf出力する方法も
構造体のときと全く同じです。」
ソーラー「まったく同じ\(^o^)/
ラッキー😊」
アレサ「はい、以下の共用体の説明は
構造体の説明と全く同じです
共用体は
構造体と同じく
複数のさまざまな型の変数を格納することができる
プログラマの方が自作する
数値、文字データのいれもののことです。
共用体宣言を行ったあと
共用体変数宣言を
おこなうと
共用体変数が作成されます。
構造体のときと同じく
共用体変数には
共用体のメンバ変数が存在します。
構造体の時と同じく ふふっ
そうして作製された
共用体変数のメンバ変数に数値を入して
格納していくことになります
共用体宣言は以下の命令文
union 共用体名{
格納する変数の型 変数;
格納する変数の型 変数;
格納する変数の型 変数;
・
・
・
};
をもちいて記述されます。
具体的な例として
まずは1つ共用体を作製してみましょう。
共用体名を
Kyouyoutaiとし
int型の変数a
float型の変数b
を共用体に格納するには
以下のように
共用体宣言をおこないます
union Kyouyoutai{
int a;
float b;
};
この共用体宣言により
union Kyouyoutaiという共用体が作製されます
そうして union Kyouyoutaiという共用体が作製されたわけですが
作製された
共用体union Kyouyoutaiはそのままではつかえません。
構造体の時と同じく
まず、共用体union Kyouyoutai型の
Kyouyoutaihennsuuの共用体変数宣言を行い
共用体変数Kyouyoutaihennsuuを作製する必要があります。
共用体変数宣言はつぎのように記述されます。
union 共用体名 共用体変数名;
共用体名がKyouyoutai
共用体変数名がKyouyoutaihennsuuなら
共用体変数宣言は 次のように記述されます。
union Kyouyoutai Kyouyoutaihennsuu;
そうして
できた共用体変数kyouyoutaihennsuu
には次のように
共用体のメンバ変数
a
b
に
ドット演算子を作用させた
共用体変数kyouyoutaihennsuuのメンバ変数
kyouyoutaihennsuu.a
kyouyoutaihennsuu.b
が存在します
こうして作製された
Kyouyoutaihennsuu.aにint aに代入される数値を
Kyouyoutaihennsuu.bにfloat bに代入される数値を
格納していくわけです。
共用体union Kyouyoutaiのメンバ変数は
a
b
共用体変数kyouyoutaihennsuuのメンバ変数は
Kyouyoutaihennsuu.a
Kyouyoutaihennsuu.b
となっています まちがえやすいかもしれません。」
ソーラー「つまり共用体変数kyouyoutaihennsuuを作製して
共用体変数kyouyoutaihennsuuのメンバ変数に数値を格納していくってわけだね。」
アレサ「実際に
今までの流れをプログラムを構成してみていきましょう。
この度は
共用体 union Kyouyoutaiに
変数宣言
int a;
のみ
格納していきます。」
ソーラー「アレサ、共用体 union Kyouyoutaiに格納するのは
int a;
だけ・・・なの?
もっと こう
int b;
とか
floatc;
とか
格納してこないの?」
アレサ「はいっ😊 そうなのです。
これは 構造体と共用体の違いにかかわっていますの。」
ソーラー「そうなんだ~ ???」
アレサ「はいっ、それでは プログラムを構成していきます
#include <stdio.h>
union Kyouyoutai {
int a;
};
/*union Kyouyoutaiの共用体宣言*/
int main(void)
{
union Kyouyoutai Kyouyoutaihensuu;
/*Kyouyoutaihensuuの共用体変数宣言*/
Kyouyoutaihensuu.a=1;
/*共用体変数Kyouyoutaihensuuのメンバ変数Kyouyoutaihensuu.aに1を代入しました*/
printf("%d\n",Kyouyoutaihensuu.a);
/*メンバ変数Kyouyoutaihensuu.aをprintf関数の第2引数に書き込み
格納された数値を%d出力変換指定子を使いprintf出力表示しました。*/
return 0;
}
コンパイル結果
1
アレサ「いかがでしょうか? ソーラーさん😊」
ソーラー「
共用体変数Kyouyoutaihensuuの
メンバ変数Kyouyoutaihensuu.aに格納された数値1を
printf出力表示するには
printf("%d\n",Kyouyoutaihensuu.a);
を記述するんだね
よくみると
このプログラム、構造体のときのプログラムと
構造は全く一緒だね。」
アレサ「
構造体Kouzoutaiに int aを取り込むプログラムは
次のようにあらわされました。
#include <stdio.h>
struct Kouzoutai {
int a;
};
/*struct Kouzoutaiの構造体宣言*/
int main(void)
{
struct Kouzoutai Kouzoutaihensuu;
/*Kouzoutaihensuuの構造体変数宣言*/
Kouzoutaihensuu.a=1;
/*構造体変数Kouzoutaihensuuのメンバ変数Kouzoutaihensuu.aに1を代入しました*/
printf("%d\n",Kouzoutaihensuu.a);
/*メンバ変数Kouzoutaihensuu.aをprintf関数の第2引数に書き込み
格納された数値を%d出力変換指定子を使いprintf出力表示しました。*/
return 0;
}
コンパイル結果
1
ソーラー「ほんと全く同じだね。
共用体と構造体って、どこがちがうのかな?」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます