*C言語* 〜40時限目〜 構造体を初期化する・・・
〜目次〜
構造体を初期化する
構造体を宣言した後に、
ドット演算子を使ってメンバに値を代入する方法について、
学びました。
この宣言と値の代入を構造体でもまとめることができます。
そのことを、
構造体の初期化
と呼びます。
変数を宣言する際に、{ }で囲んで値を記述すると、
カンマで区切った順番にメンバに値が格納されます。
構造体にあらかじめ初期値を与える際に便利なので、
覚えてください。
39時限目のコードを初期化を使って書き換えてみます。
sample91.c
ーsample91の実行画面ー
車のナンバーは7777:ガソリン量は12.300000
構造体に代入する
これまでは各メンバに対して、
代入演算子を使って値を格納してきました。
構造体変数そのものに対して代入演算子を使うとどうなるのか、
以下のコードを入力して確認してみます。
sample92.c
ーsample92の実行画面ー
car1の車のナンバーは7777:ガソリン量は12.300000
car2の車のナンバーは6666:ガソリン量は32.100000
car1をcar2に代入しました。
car2の車のナンバーは7777:ガソリン量は12.300000
sample92では、
car1とcar2という構造体を宣言しています。
そして、代入を行なっています。
この代入は、
car2のメンバにcar1のメンバを1つずつコピーして値を格納する
ということを意味しています。
構造体で同士でこのような代入をすることができるので、
覚えておいてください。
構造体型のサイズを知る
構造体も新しい型です。
そこで、構造体型のサイズについて調べてみます。
構造体型のサイズを調べるには、以前使っていた
sizeof演算子を使います。
以下のコードを入力してみてください。
sample93.c
ーsample93の実行画面ー
int型サイズは4バイトです。
double型サイズは8バイトです。
構造体struct Car型のサイズは16バイトです。
構造体struct Car型へのポインタのサイズは8バイトです。
構造体struct Car型は、int型とdouble型のメンバを持っている。
構造体型のサイズは、各メンバのサイズを足し合わせたものと同じか、
それよりも大きくなります。
従って、たくさんのメンバを持つ構造体や大きなサイズのメンバを持つ
構造体は大きなサイズになります。
ただし、
実行画面を見てわかる通り、
構造体のサイズは2つの型をぴったり足し合わせたサイズに、
なるとは限りません。
実行環境によってサイズは少し変わってきます。
一般的に、
多くのメンバを持つ構造体へのポインタは、
構造体そのもののサイズよりも小さくなっています。
次回はビットフィールドについて学んでいきます。
〜END〜