c++指针为什么((*root).(*left)).val)这种写法vs2022不行

c++指针为什么((*root).(left)).val)这种写法vs2022不行 root->left->val或(((( * root).left)).val)就可以

这个提姆https://leetcode.cn/problems/root-equals-sum-of-children/

img

第一种写法会报错↓

img

后来发现这样写可以 原来不能带*吗 我勒个去↓

img

访问成员指针的地址就可以↓

img

所以为啥不能访问成员*left 却可以访问 left

#include<iostream>
using namespace std;

 struct TreeNode {
     int val;
     TreeNode* left;
     TreeNode* right;
     TreeNode() : val(0), left(nullptr), right(nullptr) {}
     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
}t1(6),t2(4),t3(10,&t1,&t2);

class Solution {
public:
    bool checkTree(TreeNode* root) 
    {
        if (( * root).val == ((*(( * root).left)).val) + ((*((*root).right)).val))return 1;
        else return 0;
    }
}a;

int main()
{
    cout << a.checkTree(&t3);
}

因为C++没有(*root).(*left)这种语法