gpt4 book ai didi

c - 下面代码中的链表 : What does (! elem) 意味着 and (!(elem = *stack)) ?

转载 作者:行者123 更新时间:2023-11-30 15:38:10 26 4
gpt4 key购买 nike

typedef struct Element 
{
struct Element *next;
void *data;
} Element;

在 pop 函数中,(!(elem = *stack)) 行是什么意思?

bool pop( Element **stack, void **data )
{
Element *elem;
if (!(elem = *stack)) return false;

*data = elem->data;
*stack = elem->next;
delete elem;
return true;
}

在push函数中,行(!elem)是什么意思?

bool push( Element **stack, void *data )
{
Element *elem = new Element;
if(!elem) return false;

elem->data = data;
elem->next = *stack;
*stack = elem;
return true;
}

最佳答案

在 C 语言中,当在 bool 上下文中计算指针时,当且仅当它不为 NULL 时,它的计算结果为 true。即:

if (elem)

与以下内容完全相同:

if (elem != NULL)

相反:

if (!elem)

等于:

if (elem == NULL)

对于其他情况,赋值表达式作为一个整体,计算结果为指定的值。因此 (elem = *stack) 计算结果为分配的指针。所以:

if (!(elem = *stack)) return false;

相当于:

elem = *stack;
if (elem == NULL) return false;

在这种情况下,这是相当没有意义的,但想象一下 elem 是一个复杂的表达式:

if (!(array[a][b].element = *stack)) ...;

在这里,同时分配和使用的能力非常方便。

您可能已经在如下代码中见过这个 C 功能,但可能没有意识到它:

a = b = c = 0;

这确实被解析了,因为赋值是右关联的)为:

a = (b = (c = 0));

关于c - 下面代码中的链表 : What does (! elem) 意味着 and (!(elem = *stack)) ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21916796/

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