C 什么';A&&;对两个不同操作数的操作一个指针指向节点,另一个指针指向int类型?

C 什么';A&&;对两个不同操作数的操作一个指针指向节点,另一个指针指向int类型?,c,data-structures,tree,binary-search-tree,C,Data Structures,Tree,Binary Search Tree,我正在经历一个问题,其中一个BST的两个节点被交换。我们需要找到这两个节点并再次交换它以获得原始的BST() 在浏览代码时,在函数correctBSTUtil()中 if(*prev&&root->datadata) 我搞不懂对两个不同的操作数执行&&操作的意义是什么&一个指针指向node,另一个是int类型 当这个条件变为真或假时(举个例子会很有帮助)。 我试图搜索,但找不到更多关于这个的信息。 谢谢你的建议 这是 if (*prev != nullptr && root-&

我正在经历一个问题,其中一个BST的两个节点被交换。我们需要找到这两个节点并再次交换它以获得原始的BST() 在浏览代码时,在函数correctBSTUtil()中

if(*prev&&root->data<(*prev)->data)
我搞不懂对两个不同的操作数执行&&操作的意义是什么&一个指针指向node,另一个是int类型 当这个条件变为真或假时(举个例子会很有帮助)。 我试图搜索,但找不到更多关于这个的信息。 谢谢你的建议

这是

if (*prev != nullptr && root->data < (*prev)->data)
if(*prev!=nullptr&&root->data<(*prev)->data)
请注意,prev似乎是指向指针的指针。

data<(*prev)->data)
意味着

if(*prev&&(root->data<(*prev)->data))
不是

if((*prev&&root->data)<(*prev)->data)
因此,代码在
*prev
root->data<(*prev)->data
之间执行逻辑and运算

另外,在c语言中,
0
NULL
被视为
false

由于代码在
*prev
上应用
->
运算符,
prev
似乎是指向指针的指针,因此
*prev
是指针。它可能是
NULL
,在这种情况下,它将在条件表达式中计算为
false


还请注意,在这种情况下,
*prev
必须位于
&
的左侧,以便如果
*prev
NULL
if
条件已为
false
且程序根本不会计算
根->数据<(*prev)->数据
,防止试图删除引用< <代码> null <代码>指针的分割错误。

<代码> nulpPTR 是纯C++,完全不是C的一部分。谢谢:@ Stefan Haustein
if (*prev != nullptr && root->data < (*prev)->data)
if (*prev && root->data < (*prev)->data)
if (*prev && (root->data < (*prev)->data))
if ((*prev && root->data) < (*prev)->data)