チェインの繋ぎ方……?
Posted: 2009年3月30日(月) 17:19
初めまして、シュウといいます。
現在、とあるC言語入門書に載っている下記の『自己参照構造体(チェイン)』のプログラムが理解できず、
悩んでいます。
ポインタによるアドレス・関数の受け渡しや制御文の意味などは理解でき、実際に記述してコンパイル→実行もできたのですが、どうしてもこのプログラムの41行目にある
for(wp=start; wp->next != NULL; wp = wp->next)
という部分が理解できません。
wp は start のアドレスを示しており、start->next は NULL の筈なのに、どうしてこの for文 が何の問題もなく実行されるのでしょうか?
何方か、分かりやすい説明をお願いします。
現在、とあるC言語入門書に載っている下記の『自己参照構造体(チェイン)』のプログラムが理解できず、
悩んでいます。
ポインタによるアドレス・関数の受け渡しや制御文の意味などは理解でき、実際に記述してコンパイル→実行もできたのですが、どうしてもこのプログラムの41行目にある
for(wp=start; wp->next != NULL; wp = wp->next)
という部分が理解できません。
wp は start のアドレスを示しており、start->next は NULL の筈なのに、どうしてこの for文 が何の問題もなく実行されるのでしょうか?
何方か、分かりやすい説明をお願いします。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct person {
char name[30];
int age;
struct person *next;
};
main()
{
struct person dmy;
struct person *start=&dmy;
struct person *wkdata;
struct person *wp;
char name[30]=" ",buf[10];
int tosi;
start=&dmy;
start->next=NULL;
while(1){
printf("名前=");
gets(name);
if(strcmp(name,"") == 0) break;
printf("年齢=");
gets(buf); tosi=atoi(buf);
wkdata=(struct person *)malloc(sizeof(struct person));
if(wkdata==NULL){
printf("メモリ確保できません.\n");
exit(1);
}
strcpy(wkdata->name,name);
wkdata->age = tosi;
for(wp=start; wp->next != NULL; wp = wp->next){
if(tosi < wp->next->age){
wkdata->next = wp->next;
wp->next = wkdata;
break;
}
}
if(wp->next == NULL){
wkdata->next = NULL;
wp->next = wkdata;
}
}
for(wp = start->next; wp != NULL; wp = wp->next){
printf("%s %d\n",wp->name,wp->age);
}
}