gpt4 book ai didi

c - 使用基于指针的条件时,即使循环条件为零,循环条件是否也有效?

转载 作者:行者123 更新时间:2023-11-30 20:10:29 24 4
gpt4 key购买 nike

据我所知,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();
}
}

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

最佳答案

as the loop is going on even though "ptr->next" is zero everytime,

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

此时,我们已经

ptr->next=nw;

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

顺便说一句,请注意这一行的缩进令人困惑 - 它进入一个 block ,就好像它是循环体一样,但它不是 - for 循环后面有一个分号,即一个空语句,它是循环体(IOW,您有一个带有空体的 for 循环,因为它要做的所有事情都已经在增量部分中完成了)。

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

关于c - 使用基于指针的条件时,即使循环条件为零,循环条件是否也有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45268240/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com