这是从我已经完成的队列中删除前项的代码。 我试着理解itemPtr将以某种方式在主要中使用..尚不知道,但这不是重点。 我想知道是否
if (queue->count == 0)
可以使用代替
if (!queue->count)
NULL和0是否以相同的方式使用?
要添加,这是做什么的?
free(deleteLoc)
我认为deleteLoc会在此dequeue方法结束后消失,但为什么要添加它?这不是我的代码,所以我很好奇。它是否会删除deleteLoc包含的内存或queue-> front? 不是重点是让数据本身消失吗?
谢谢。
bool dequeue(H* queue ,void* itemPtr)
{
node* deletecLoc;
if (!queue->count)
return false;
*itemPtr = queue->front->dataPtr;
deleteLoc = queue->front;
if (queue->count == 1)
queue->front = queue->rear = NULL;
else
queue->front = queue->front->next;
(queue->count)--;
free(deleteLoc);
return true;
}
答案 0 :(得分:2)
我想知道是否
可以使用if (queue->count == 0)
代替
if (!queue->count)
是的,您总是可以通过显式比较表达与零的隐式比较,反之亦然。
NULL
和0
的使用方式是否相同?
在由if
,while
和其他控制语句执行的隐式比较为零的上下文中,与NULL
的比较和与零的比较以相同的方式表现。
这是做什么的?
free(deleteLoc)
要理解这一点,您需要查看enqueue
的代码并找到对malloc
或calloc
的来电。实质上,free
是malloc
的“撤消”,告诉系统您不再使用动态分配给它的内存。
是否会消除
deleteLoc
包含的内存或queue->front
它可能会也可能不会更改deleteLoc
指向的内存的内容,但这并不重要,因为该内存对您的程序不受限制:在调用{{1}后访问它是未定义的行为。
答案 1 :(得分:0)
if (queue->count == 0)
将执行与if (!queue->count)
完全相同的操作,因为在C中,如果某些内容求值为0
,如果将其视为布尔值,则会将其计算为false
。
在这种情况下,是的,NULL
和0
将实现同样的目标。 NULL
指的是空指针,而0通常是数字零,但它们的计算结果相同。
最后,free
将摆脱之前分配的内存。您没有显示所有代码,但在insert
函数的某处,会有一个malloc
(或类似函数)为您分配内存以存储您的节点。{{1摆脱了那个内存,你需要在完成一个节点后调用它。