在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
时产生错误。为什么?
答案 0 :(得分:10)
此表达式
*headref->data
等同于
*( headref->data )
它与有效表达式不同
( *headref )->data
因为数据成员data
没有指针类型,并且您不能对其应用一元运算符*。
此表达式
((Node*)*headref)->data
有效不是由于强制转换。这是有效的,因为如果删除多余的转换,您将获得有效的edxpression
( /*(Node*)*/ *headref)->data
如上所示。
答案 1 :(得分:3)
如果将运算符链接在一起,确保正确记住它们的优先级始终是一个好主意。如列出的here,operator->
的优先级比间接*
高。因此
*headref->data
被解释为
*(headref->data)
这是行不通的。而是使用
(*headref)->data
等效于((Node*)headref)->data
。