Как переписать "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;
... но это больно писать и больно читать, так что это хороший пример того, почему ->
оператор полезен:)