Как переписать "node->left->key", заменив -> на "(*)." в С ++?

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

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

 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 ответ

Решение

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

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

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

Другие вопросы по тегам