C 基本講座

共用体の使い方を理解する

LinkedInラーニングの無料トライアルを今すぐ試そう

無料で視聴する すべての加入プランを見る
このレッスンでは、同一のデータ領域を複数個の異なるデータ型が共用する共用体について説明します。
講師:
07:16

字幕

このレッスンでは、同一のデータ領域を複数個の異なるデータ型が共用する共用体について説明します。共用体は同一のデータ領域を複数個の異なるデータ型が共用するようにしたものです。共用体は struct が union になるだけで宣言の仕方や使い方などは構造体と全く同じです。しかし、共用体は各メンバが全て同じアドレスから割り振られている点が構造体とは大きく異なります。このプログラムでは、共用体の型枠と変数を宣言しています。共用体の使用手順は struct が union になるだけで構造体と同じです。まずこの例のようにunion とタグ名を記述します。そして { } のブロックの中にメンバのデータ型とメンバ名を記述し共用体の型枠を宣言します。この例では unsigned int の i とunsigned short の s とunsigned char の c がメンバです。この時、実体は定義されていません。次に、共用体の実体を定義します。ここでは変数の u_dt を宣言しています。構造体の場合には各メモリはメモリ上にそれぞれ確保されましたが共用体の場合には、この図のように3つのメンバの先頭アドレスは同じ位置になり領域を共用します。 試しに各メンバのアドレスを表示してみましょう。実行してみます。このように、全てが同じアドレスから始まりますね。次に初期化をしてみましょう。共用体の初期化は構造体と同じように{ } の中に各メンバの値をカンマで区切って記述します。但し、初期化には注意が必要です。共用体の初期化は、その最初のメンバの値で行わなければなりません。この記述で最初のメンバの i が0x11111111 で初期化されます。値を表示するようにprintf を書き換えてみましょう。このように #x と記述すると16 進数表記で頭に 0x を付けて表示することができます。値を表示するのでこの & も要りませんね。共用体の各メンバを参照する場合にも構造体と同じようにこのようにオブジェクト名とメンバ名をドット演算子で繋いで行います。実行してみます。このようにメンバの i と s と c は互いに領域を共用しますのでi を 11111111 で初期化すると次のメンバの s は 1111そして、メンバの c は11 で初期化されます。また、ポインタで共用体のメンバを指す場合にはこのようにアロー演算子を使用します。実行してみましょう。 アロー演算子を使って各メンバをポインタで指して表示することができます。次に、特定のメンバだけ代入して値を変えてみましょう。特定のメンバへの代入は共用体はメモリを共用しているので特定のメンバへの値の代入は他のメンバへも影響します。実行してみましょう。この例では、メンバの c に22 を代入しているのでこのようにメンバの i と s も影響を受けています。このようにメンバの s に 3333 を代入するとメンバの i と c も影響を受けます。共用体の出番は多くはありませんがメモリ領域を節約したりあるデータを別の側面で利用したりする場合に用いられます。例えば、単精度浮動小数点型であるフロート型の内部表現を取得するにはこのように記述します。フロート型のデータは処理系依存ですが多くの処理系ではこの図のように1ビットの符号部、8ビットの指数部、23 ビットの仮数部で構成されています。このプログラムでは、まずフロート型のデータサイズは 32 ビットなので、32 ビットの整数型である int 型とunion を形成しています。次に-1.25f で初期化しています。これでフロート型のメンバのf が初期化されました。 そして符号部は先頭の1ビットなのでint 型の a.i を 31 ビット左シフトし1ビットですから、1と&をすることによって求めています。指数部は次の8ビットなのでa.i を 23 ビット左シフトしそして、8ビットですからff で & することによって求めています。仮数部は残りの 23 ビットなので0x7fffff で&すれば求めることができます。なお、このプログラムでは、ビットの並びも表示するためにこのように show_bit という関数を追加しています。では実行してみましょう。実行すると、このように-1.25 の符号部は1指数部は 7f仮数部は 200000 と得ることができます。このレッスンでは、同一のデータ領域を複数個の異なるデータ型が共用する共用型について説明しました。

C 基本講座

C言語はUNIXというOSを記述するために開発されたプログラミング言語で、組み込みシステムの開発を中心に今も使われています。このコースでは簡単なプログラムを作成しながら、C言語の基本的な文法を学びます。データ型や制御文などの基礎的な文法からポインタや構造体といったC言語の特徴的な内容まで幅広く取り上げます。よく使われる標準ライブラリ関数も数多く紹介します。

5時間45分 (60 ビデオ)
現在、カスタマーレビューはありません…
ソフトウェア・トピック
プラン加入者限定
発売日:2017年11月05日

このコースは、「オンデマンド」でご利用可能であり、ダウンロードすることもオンラインで見ることもできます。

ダウンロードすると、オフラインでコースを使用し、豊富なインターフェースをフルに活用できます。複数のデバイスを使用したり、 一度に全コースをダウンロードしたくない場合は、アカントにログインして、ストリーミング・ビデオとしてコースのレッスンを視聴してください。

ビデオトレーニングをお楽しみいただけますように! お問い合わせは、cs-jp@lynda.com宛までご連絡ください。