Closed. This question needs to be more focused. It is not currently accepting answers. Learn more
想改进这个问题吗?更新问题,使其只关注一个问题editing this post
两年前关闭。
这是从队列中删除前项的代码。
我试着去理解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;
}

最佳答案

我想知道

if (queue->count == 0)

可以代替
if (!queue->count)

是的,您总是可以通过显式比较将隐式比较表示为零,反之亦然。
NULL0的用法是否相同?
在由ifwhile和其他控制语句执行的与零的隐式比较的上下文中,与NULL的比较和与零的比较的行为方式相同。
这是干什么的?
free(deleteLoc)

要理解这一点,您需要查看enqueue的代码并找到对malloccalloc的调用。本质上,freemalloc的“撤消”,告诉系统不再动态使用分配给它的内存。
它是否会抹去deleteLoc所包含或queue->front的记忆
它可能改变也可能不改变deleteLoc所指向的内存的内容,但这无关紧要,因为该内存对您的程序是不受限制的:在调用free之后访问它是未定义的行为。

10-06 05:24