为什么不能指向指针,不进行强制转换就访问结构成员?

Why can't pointer to pointer, access struct members without a cast?

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

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

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

struct Node** headref = &head; 

但是,作为 *headref->data 访问会在转换为 ((Node*)*headref)->data 时产生错误。为什么?

这个表达式

*headref->data

相当于

*( headref->data )

与有效表达式不同

( *headref )->data

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

这个表达式

((Node*)*headref)->data

有效不是因为铸造。这是有效的,因为如果删除多余的转换,您将获得有效的 edxpression

( /*(Node*)*/ *headref)->data

如上所示。

如果将运算符链接在一起,确保正确记住它们的优先级始终是个好主意。如所列 hereoperator-> 的优先级高于间接 *。因此

*headref->data

被解释为

*(headref->data)

这行不通。相反,使用

(*headref)->data

相当于((Node*)headref)->data.