C While循环内的优先级
我为链表编写了一个程序,它接受升序的值。我在程序中有一个while循环,对此我有一个问题。我并没有输入完整的代码,它只是以升序插入的模块化函数。这里,x作为来自用户的输入,head节点被传递到函数中。现在,在while循环中,如果我交换条件,即保持x>temp->next->data在前面,移动temp->next!=空,那么,如果我的输入序列像1,2,3,4,5,也就是说,已经是升序了,我就得到了一个错误C While循环内的优先级,c,while-loop,C,While Loop,我为链表编写了一个程序,它接受升序的值。我在程序中有一个while循环,对此我有一个问题。我并没有输入完整的代码,它只是以升序插入的模块化函数。这里,x作为来自用户的输入,head节点被传递到函数中。现在,在while循环中,如果我交换条件,即保持x>temp->next->data在前面,移动temp->next!=空,那么,如果我的输入序列像1,2,3,4,5,也就是说,已经是升序了,我就得到了一个错误 list *insert(list *head, int x) { list
list *insert(list *head, int x)
{
list *temp = head, *prev = temp, *temp2 = create();
temp2->data = x;
if(head == NULL || x < head->data)
{
temp2->next = head;
head = temp2;
}
else
{
while(temp->next != NULL && x > temp->next->data) //while(x > temp->next->data && temp->next != NULL)
{
temp = temp->next;
}
temp2->next = temp->next;
temp->next = temp2;
}
return head;
}
我想是这样的,当我输入1时,它会转到如果statementHead最初是空的,并且1被添加到列表中。然后,当我输入2并检查条件时,由于列表中只有一个元素,temp->next为NULL,NULL->data将给出一个错误。但是,如果条件符合上述程序,则它可以工作。是不是while循环优先于自身的条件 您看到的行为与while无关,而是与逻辑AND运算符&&>有关 &&运算符是短路运算符。这意味着,如果只能通过计算左操作数来确定操作数的结果,则根本不计算右操作数 在这种情况下,这是一件好事。如果temp->next为NULL,则&&的左操作数为false,因此我们知道运算符的结果为false,因此无需计算x>temp->next->data 但是,如果要切换&&的操作数:
然后计算temp->next->data,而不检查temp next是否为NULL。这打开了取消引用调用的空指针的可能性。&&是短路。也就是说,如果a和b中的a为false,则不会计算b。请记住,逻辑运算符| |和&&使用。如果temp->next为NULL,则调用temp->next->data将导致错误。在尝试访问temp->next->数据之前,必须检查temp->next是否为NULL。
x > temp->next->data && temp->next != NULL