今回のポイント

今回ちゃんと理解してもらいたいことはそんなにありません。 そのかわり、以下の事柄を完璧に理解してください。 です。共用体に関しては、勉強しなくてよいでしょう。 また、プログラム8.2は、第二回目の講義で用いたプログラムです。 当時は、何をしているかよくわからなかったプログラムも、 ここまで勉強して来たみなさんにとっては、よく理解できることでしょう。

構造体の宣言の方法

構造体を使用する場合、

を事前に決める必要があります。

例えば、

などです。時間を表現するのに、「時」、「分」、「秒」を用いるというのは、 自然な考え方ですよね。そして、その三つを組にして扱うというのも、 自然な考えですよね。

この場合、Cでは次のように構造体の宣言をします。


struct jikan {
  int ji;
  int hun;
  int byou;
};

さらに、実際に使われる関数の中で、

struct jikan a, b, c;

などと定義することにより、利用することができます。 ここで、構造体の変数名は、a, b, cとなります。

構造体の各項目を参照するには、 a.ji とか c.byou などとします。つまり、 「変数名.項目名」として参照します。 これを、一つの変数だと思って、 いろいろな処理(たしたり、引いたり、関数の引数としたり) をすることができます。また、構造体ごと、関数に渡すこともできます。


関数への渡し方

引数として構造体をポインタとして関数に渡すときには、 構造体の変数名に & をつけて、渡します。 例えば、関数名をfuncとし、渡す構造体の変数名が、a, bである時、 以下のように記述します。

func(&a, &b);

一方、上記の場合、関数は以下のように定義します。 教科書に従えば、

void func(aa, bb, cc)
struct jikan *aa, *bb, *cc;
{
処理の記述
}

となります。推奨される書き方に従えば、

void func(struct jikan *aa, struct jikan *bb, struct jikan *cc)
{
処理の記述
}

となります。 関数の中での構造体の項目は、次のように行います。

aa->ji

文法的には、

(*aa).ji

と書いてもいいのですが、どちらも正しい文法になります。 ただし、->を使うことの方が一般的です。

ポインタとして渡されないときの記述法は、通常の場合と同じです。 この違いについては、後で吟味します。 ただし、ポインタとして渡す必要が無い場合でも、 慣例的にポインタとして渡すことの方が多いようです。


構造体の配列

配列の宣言は以下のように行います。

struct jikan a[10];

これは、ほぼ予想通りですね。

値の参照は、


a[5].ji

などとして行います。これも、予想通りですね。
prev index next