Как переписать "node-> left-> key", заменив -> на "(*)." в С ++? - PullRequest
0 голосов
/ 17 января 2019

Я новичок в символе "->", поэтому вместо этого я заменяю его на (*). , Однако, когда я наткнулся на строку кода ниже, я попытался заменить ее, и она не сработала. Что я делаю не так и есть ли способ переписать это?

Я получаю сообщение об ошибке, что «ключ» является указателем, и когда я переписываю его, он не работает. Я трижды проверил свой код, но все еще не понимаю.

 struct Node{
    int key;
    Node *left;
    Node *right;
 };

  Node* createNode(int key){
   Node *node = new Node();
   (*node).key = key;
   (*node).left = NULL;
   (*node).right = NULL;
   return node;
  }


  int main(){
     Node *root = createNode(1);
     (*root).left = createNode(9);
     cout << root->left->key;  // Correct?
     cout << " OR ";
     cout << ((*root).left).(*key); 
    // this is where my code goes wrong and if I remove the (*) from key
    // and just leave it like .key it's wrong because key has to be a pointer
     return 0;
  }

Я ожидаю, что результат будет "9 ИЛИ 9", но он даже не позволяет мне компилировать после этой точки.

1 Ответ

0 голосов
/ 17 января 2019

Если вы действительно хотите избежать оператора ->, вы можете написать его так:

 cout << (*((*root).left)).key;

... но писать больно и читать больно, поэтому это прекрасный пример того, почему полезен оператор ->:)

...