Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-about空条件和自由条件下队列的链表实现_C_Data Structures_Queue_Free - Fatal编程技术网

C-about空条件和自由条件下队列的链表实现

C-about空条件和自由条件下队列的链表实现,c,data-structures,queue,free,C,Data Structures,Queue,Free,这是用于从我已经创建的队列中删除前面项目的代码。 我试着理解itemPtr将以某种方式在main中使用。。还不知道,但这不是重点。 我想知道 if (queue->count == 0) 可以用来代替 if (!queue->count) if (!queue->count) NULL和0的使用方式是否相同 另外,这有什么作用 free(deleteLoc) free(deleteLoc) 我以为deleteLoc会在这个出列方法结束后消失,但为什么要添加这个呢?这不

这是用于从我已经创建的队列中删除前面项目的代码。 我试着理解itemPtr将以某种方式在main中使用。。还不知道,但这不是重点。 我想知道

if (queue->count == 0)
可以用来代替

if (!queue->count)
if (!queue->count)
NULL和0的使用方式是否相同

另外,这有什么作用

free(deleteLoc)
free(deleteLoc)
我以为deleteLoc会在这个出列方法结束后消失,但为什么要添加这个呢?这不是我的代码,所以我很好奇。它是否会删除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)
完全相同的操作,因为在C中,如果某个值计算为
0
,如果将其视为布尔值,则它将计算为
false

在这种情况下,是的,
NULL
0
将实现同样的效果
NULL
表示空指针,而0通常是数字0,但它们的计算结果相同

最后,
free
将去掉先前分配的内存。您尚未显示所有代码,但在
insert
函数的某个地方,将有一个
malloc
(或类似函数),它为您分配内存以存储节点
Free
去掉了内存,当你处理完一个节点时需要调用它。

如果(队列->计数==0)
将做与
如果(!队列->计数)
完全相同的事情,因为在C中,如果某个东西的计算结果为
0
,如果你将它作为布尔值处理,它的计算结果将为
false

在这种情况下,是的,
NULL
0
将实现同样的效果
NULL
表示空指针,而0通常是数字0,但它们的计算结果相同

最后,
free
将去掉先前分配的内存。您尚未显示所有代码,但在
insert
函数的某个地方,将有一个
malloc
(或类似函数),它为您分配内存以存储节点
Free
清除该内存,在处理完节点后需要调用它

我想知道

if (queue->count == 0)
可以用来代替

if (!queue->count)
if (!queue->count)
是的,您始终可以使用显式比较将隐式比较表示为零,反之亦然

NULL
0
的使用方式是否相同

在由
if
while
和其他控制语句执行的对零隐式比较的上下文中,对
NULL
的比较和对零的比较的行为方式相同

这有什么用

free(deleteLoc)
free(deleteLoc)
要理解这一点,您需要查看
enqueue
的代码,并找到对
malloc
calloc
的调用。本质上,
free
是对
malloc
的“撤销”,告诉系统您不再动态使用分配给它的内存

它是否会删除包含的
deleteLoc
内存或
queue->front

它可能会也可能不会更改由
deleteLoc
指向的内存的内容,但这并不重要,因为该内存成为程序的禁区:在调用
free
后访问它是未定义的行为

我想知道

if (queue->count == 0)
可以用来代替

if (!queue->count)
if (!queue->count)
是的,您始终可以使用显式比较将隐式比较表示为零,反之亦然

NULL
0
的使用方式是否相同

在由
if
while
和其他控制语句执行的对零隐式比较的上下文中,对
NULL
的比较和对零的比较的行为方式相同

这有什么用

free(deleteLoc)
free(deleteLoc)
要理解这一点,您需要查看
enqueue
的代码,并找到对
malloc
calloc
的调用。本质上,
free
是对
malloc
的“撤销”,告诉系统您不再动态使用分配给它的内存

它是否会删除包含的
deleteLoc
内存或
queue->front


它可能会也可能不会更改由
deleteLoc
指向的内存的内容,但这并不重要,因为该内存成为程序的禁区:在调用
free
后访问它是未定义的行为。

首先,
NULL
是空指针的符号名。其次,在C语言中,所有非零都被认为是真的,而零则是假的。这就解释了逻辑求反运算符
的作用队列->计数
为零(因此为假),则
!队列->计数
将为真。如果你知道的话,所有这些都应该知道。请从这里开始,每个问题只回答一个问题。请花些时间阅读,特别是命名和。也请和。最后,请学习如何创建空指针。首先,
NULL
是空指针的符号名。其次,在C语言中,所有非零都被认为是真的,而零则是假的。这就解释了逻辑求反运算符
的作用队列->计数
为零(因此为假),则
!队列->计数
将为真。如果你知道的话,所有这些都应该知道。请从这里开始,每个问题只回答一个问题。请花些时间阅读,特别是命名和。也请和。最后,请学习如何创建一个。实际上在C中,
NULL
的类型是
void*
。这在语义上与
int
0
非常不同。实际上,在C语言中,
NULL
的类型通常是
void*
。那是