我对以下陈述的含义(不是第三级运营商部分)有疑问(
)return(((*data)*(tmp_left)<(*data)*(tmp_right))?tmp_left:tmp_right);
其中数据是指针, tmp_left 是int类型的变量。该行与树结构有关,如果有帮助的话。
确切地说,我想知道(*data)
是什么意思?它是指针指向的值还是由它访问的成员变量?指针和变量之间的星号'*'表示什么? *
(tmp_left)
答案 0 :(得分:3)
(*data)*(tmp_left)
- 由于data
是一个指针,(*data)
取消引用它(获取值,由data
指向,然后该值乘以tmp_left
(在你的情况下,如你所说,int
)
其他部分应该清楚:)
编辑:您可以通过将其分成不同的部分来轻松阅读这些内容
return(((*data)*(tmp_left)<(*data)*(tmp_right))?tmp_left:tmp_right);
1. (*data) - get the value, pointed by data 2. tmp_left is an int 3. multiply (*data) and tmp_left (lets say the value is X) 4. (*data) - get the value, pointed by data 5. tmp_right is an int 6. multiply (*data) and tmp_right (lets say the value is Y) 7. now compare X and Y 8. if X < Y, return tmp_left, else return tmp_right
答案 1 :(得分:3)
(* data)*(tmp_left)取消引用数据指针的值,并将结果值乘以tmp_left。
总的来说,如果'd'是数据指向的值,则表示“if(d * tmp_left)小于(d * tmp_right),返回tmp_left,否则返回tmp_right”。
答案 2 :(得分:3)
在不知道数据类型的情况下,并且知道它在树中使用(假设它是BST),这看起来像是数据值的比较。
实质上,当您拥有BST时,您将在直接节点的左侧或直接节点的右侧插入节点。看起来数据值包含在节点中并且是指针。所以,(* data)对节点进行了描述。 (* data)* tmp_left将值相乘。
其余的是比较声明。如果表达式的左侧小于右侧大小,请使用tmp_left数据值。否则,继续向右。
答案 3 :(得分:1)
What does the asterisk '*' between the pointer and a variable signify?
Multiplication(在此上下文中)
答案 4 :(得分:1)
return(((*data)*(tmp_left)<(*data)*(tmp_right))?tmp_left:tmp_right);
让我们简化一下,
int a = (*data); //get the value from the address pointed to be 'data'
int x = a * (tmp_left); //multiplication
int y = a * (tmp_right); //multiplication
//substitute x and y in the original expression, it becomes
return ( x < y ? tmp_left : tmp_right );
现在它看起来简单易懂,对吧?
答案 5 :(得分:1)
变量名之前的*
与*data
中的*
是取消引用指针。
它们之间的tmp_right
用于乘法。
此代码返回最小的tmp_left
和return((tmp_left)<(tmp_right)?tmp_left:tmp_right);
。
它似乎在功能上与:
相同*data
我不确定x*y < x*z
指的是什么,但除非出现奇怪的事情,否则乘法实际上没有任何影响,因为y < z
等同于{{1}}。
答案 6 :(得分:1)
当你看到像这样复杂的陈述时,试着简化它。首先,打破三元运算符并添加一些空格:
if(((*data) * (tmp_left) < (*data) * (tmp_right)))
{
return tmp_left;
}
else
{
return tmp_right;
}
下一个因素输出*数据并删除多余的parens:
data_type& d = *data;
if((d * tmp_left < d * tmp_right))
{
return tmp_left;
}
else
{
return tmp_right;
}
此时显而易见的是*
是乘法,而且正是函数中正在发生的事情。 如果 *data
总是肯定的,那么你可以将该术语完全分解,但情况可能并非如此。