据我所知,for
循环具有这种结构" for(init; condition; increment)"并继续直到条件不为零或为真。现在,我遇到了这样的代码:
struct node
{
int no;
struct node *next;
};
struct node *first;
void creatlist()
{
char ch='y';
struct node *ptr,*nw;
while(ch!='n')
{
printf("\nEnter item in list");
nw=(struct node*)malloc(sizeof(struct node));
scanf("%d",&nw->no);
nw->next=0;
if(first==0)
{
first=nw;
}
else
{
for(ptr=first ;ptr->next!=0;ptr=ptr->next);
{
ptr->next=nw;
}
}
printf("\nDo you want to countinue y\n");
ch=getch();
}
}
我对for循环有一些理解问题" ptr-> next!= 0"即使" ptr-> next"每次都是零,但据我所知,它不应该是。任何人都可以帮我找到解释吗?
答案 0 :(得分:2)
因为循环正在进行,即使" ptr-> next"每次都为零,
不是真的。它仅对列表的最后一个元素为零。只要当前元素具有有效for
,next
循环就会遍历列表,因此当循环终止时ptr
指向最后一个元素。
此时,我们有
ptr->next=nw;
将最后一个节点(当前为0)的next
指针更改为指向新创建的节点。
顺便说一下,请注意这条线是容易混淆的缩进 - 它就像是循环体一样进入一个块,但它不是 - for
循环后面有一个分号它,即一个空语句,它是一个循环体(IOW,你有一个带有空体的for
循环,因为所有它必须做的就是在增量部分完成了。)
ptr->next=nw;
在一个区块中没有充分的理由,它完全独立于循环体。如果您在此处添加next
值printf
,则可能是您混淆的原因。