c ++中的条件运算符

时间:2014-06-19 04:59:29

标签: c++

我对以下代码感到困惑,并尝试理解它们的含义。

 if( (root->left == NULL) || (root->right == NULL) )
 {
    Node *temp = root->left ? root->left : root->right;
 }

表示if root->left ==NULL然后temp = root->leftelse temp = root->right

3 个答案:

答案 0 :(得分:5)

你不完全正确,但你明白了。这是一个条件运算符,它接受三个操作数

 var = condition ? expression1 : expression2

相当于

if( condition )
  var = expression1
else
  var = expression2

在你的情况下,它意味着

  

如果root-> left!= NULL则temp = root-> left,否则temp = root-> right

而不是

  

如果root-> left == NULL则temp = root-> left,否则temp = root-> right

答案 1 :(得分:1)

表示以下内容:如果leftrightNULL,则temp等于NULL,否则left为{{} 1}},然后NULL等于temp,否则如果rightright,则NULL等于temp

答案 2 :(得分:1)

你错了。这意味着root->left == NULL然后是*temp = root->right
否则root->right == NULL然后*temp = root->left
其他*temp将不会被设置。

有4种可能的情况:

  1. root->left == NULLroot->right != NULL*temp将为root->right
  2. root->left == NULLroot->right == NULL*temp将为root->right
  3. root->left != NULLroot->right != NULL*temp将不会设置。
  4. root->left != NULLroot->right == NULL*temp将为root->left
  5. 现在你可以看到第二和第三种情况可能是潜在的问题。