以下のプログラムで一番下の while (1)でa = a->nextlist;が1つ前のアドレスを指すのがわかりません。教えてください。
コード #include <stdio.h> #include <stdlib.h> #include <string.h> struct list { int num_data; struct list *nextlist; }; int main() { struct list *a; struct list *b; char str[16]; b = NULL; printf("整数を入力(Eで終了)-->"); scanf("%s", str); //最初に整数を1個入力します。 while(1){ if(strcmp(str, "E") != 0) //strcmpは文字列の比較, //すると最初のwhileループの中で //入力されたものが「E」でないために(13としたもの) a = (struct list *)malloc(sizeof(struct list)); //list型構造体の大きさ分だけ 動的にメモリが確保されます。 //このアドレスがポインタaに代入されます。 else break; a->num_data = atoi(str);//atoiは文字列をint型に変換する //入力されたデータを構造体メンバに代入します。 a->nextlist = b; //nextlistメンバにb(NULL)を代入します。 //最初の構造体の nextlistメンバにはNULLが入っています b = a; //確保したメモリ領域の先頭アドレスをbに代入する。 printf("整数を入力(Eで終了)-->");//新しいデータを メンバに代入します scanf("%s", str); //新しいデータを メンバに代入します } printf("入力された整数は"); a = b; //aには最後の代入を行った構造体のアドレスが 入ります。 while (1) { if (a == NULL) break; printf("%d, ", a->num_data); a = a->nextlist; } return 0; }
前回の質問(https://teratail.com/questions/101042 )と、何が違うのかがわかりません
すみません。おなじですね。まだまだ理解不足ですね。Takahito_Ogawaさんの説明をよく読んでみます。皆さんおせわになります。
回答2件
あなたの回答
tips
プレビュー