C语言 在使用基于指针的条件时,即使循环条件为零,循环条件是否有效?



据我所知,for循环具有这种结构"for(init;条件;递增(",并继续,直到条件不为零或为真。现在,我遇到了这样的代码:

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 yn");
ch=getch();
}
}

我对带有"ptr->next!=0"条件的 for 循环有一些理解问题,因为即使"ptr->next"每次都是零,循环仍在继续,但根据我所知,它不应该是。谁能帮我找到解释?

因为循环仍在继续,即使"ptr->next"每次都是零,

没有。仅列表的最后一个元素为零。只要当前元素具有有效的nextfor循环就会遍历列表,因此当循环终止时,ptr指向最后一个元素。

在这一点上,我们有

ptr->next=nw;

这会将最后一个节点(当前为 0(的next指针更改为指向新创建的节点。

顺便说一下,请注意,这一行令人困惑地缩进了 - 它变成了一个块,就好像它是循环体一样,但事实并非如此 -for循环后面有一个分号,即一个空语句,这是循环体(IOW,你有一个带有空体的for循环,因为它所要做的就是在增量部分中完成(。

ptr->next=nw;无缘无故地处于一个块中,它完全独立于环体。如果您在此处打印next值添加一些printf,这可能是您感到困惑的原因。

相关内容

  • 没有找到相关文章

最新更新