第21回

構造体配列

00/06/29 サンプルプログラムのインデントを改善した
98/11/06 IE4.xに対応させた

前回は、構造体へのポインタについて学びました。果して貴方は、それがフツーの変数へのポインタと変わらないことに気付くことができましたか?
K&R2第1章1.1には、1つのCプログラムは、その大きさはどうであれ、関数変数からなる、と記されています。つまり前回の「kozo構造体a」とは、「kozo構造体を型とする変数a」・・・そう、あれは変数なのです。

その証拠(?)に、構造体を型とする変数にも配列といったものが存在します(構造体配列)。そのことは前回触れないでしまったので、ここでちょっとだけ学んでみることにしましょう。前回のkozo構造体で、例えば、
struct kozo a[3];
と宣言した場合は、

a[0].name、a[0].lv
a[1].name、a[1].lv
a[2].name、a[2].lv

が使えるようになります。で、ポインタでこの配列aのアドレスを指し示す場合は、フツーの変数の配列と同様に、配列名が先頭アドレスとなります。つまり「a」です。簡単な例を以下に示します。

#include<stdio.h>
#define MAX 3

struct kozo{
    char *name; /*  名前   */
    int  lv;    /*  レベル */
};

main(){
    struct kozo a[MAX],*p;

    a[0].name="pygboku";
    a[0].lv=25;

    a[1].name="yxa";
    a[1].lv=3;

    a[2].name="Zako!";
    a[2].lv=1;

    for(p=a;p<a+MAX;p++)printf("%s:%d\n",p->name,p->lv);
}
で実行結果は、
pygboku:25
yxa:3
Zako!:1
つづく。

[メニュー][第20回][第22回]

[質問]その1
[質問]その2

いーざ
email:CQP00202@nifty.ne.jp