为什么指针不能在没有强制转换的情况下访问指针成员?

Sid*_*bra 3 c++ pointers operator-precedence unary-operator

在C ++中,我试图通过双指针访问结构成员headref,如下所示

struct Node{
    int data; 
    struct Node* next; 
};

struct Node* head = new Node;
head->data = 10; 
head->next = NULL; 

struct Node** headref = &head; 
Run Code Online (Sandbox Code Playgroud)

However, accessing as *headref->data produces errors while casting it ((Node*)*headref)->data works. Why?

Vla*_*cow 10

这个表达

*headref->data
Run Code Online (Sandbox Code Playgroud)

相当于

*( headref->data )
Run Code Online (Sandbox Code Playgroud)

它与有效表达式不同

( *headref )->data
Run Code Online (Sandbox Code Playgroud)

因为数据成员data没有指针类型,并且您不能对其应用一元运算符*。

这个表达

((Node*)*headref)->data
Run Code Online (Sandbox Code Playgroud)

有效不是由于强制转换。这是有效的,因为如果删除多余的转换,您将获得有效的edxpression

( /*(Node*)*/ *headref)->data
Run Code Online (Sandbox Code Playgroud)

如上所示。