C 什么';A&&;对两个不同操作数的操作一个指针指向节点,另一个指针指向int类型?
我正在经历一个问题,其中一个BST的两个节点被交换。我们需要找到这两个节点并再次交换它以获得原始的BST() 在浏览代码时,在函数correctBSTUtil()中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-&
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)