struct List lists[20];とやれば、構造体用の領域が 20 個分でき、 listsという定数値が、その配列の先頭アドレスを指すことに なります。listsは、structure List へのpointer型なので、 lists+1は、 第1番目の要素(lists[1])をさすという具合いです。
struct STR0 {
int tag;
int items[20];
int color;
};
/* アクセスイメージ
* struct STR0 * str0;
* str0->items[10] = 4;
*/
ならば、struct STR0 は、int tag と items というサイズ 20の配列と int colorを内部に持つ
ことになります。多くの処理系では、int データ 22個分の領域(88byte)消費することになるでしょう。
struct STR1out {
int tag;
struct STR1in { /* STR1in にあまり意味はない*/
int val;
int bgcolor;
} body;
int color;
};
/* アクセスイメージ
* struct STR1out * str1;
* int bgcolor = str1->body.val;
*/
この例の用に中に含まれる struct の定義を同時に行っても構いません。
この例だと、STR1in という名前は使いませんので、省略しても構いません。
ちなみに、structure の中に structure の配列を入れてもらっても構いません。
struct STR1out {
int tag;
struct STR1in { /* STR1in にあまり意味はない*/
int val;
int bgcolor;
} body[1]; /* size は 1 でも 2でも定数ならOK */
int color;
};
/* アクセスイメージ
* struct STR1out * str1;
* int bgcolor = str1->body->val;
*/
2001.11.19/ Tomio KAMADA: kamada@cs.kobe-u.ac.jp