为什么不能指向指针,不进行强制转换就访问结构成员?
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
如上所示。
如果将运算符链接在一起,确保正确记住它们的优先级始终是个好主意。如所列 here,operator->
的优先级高于间接 *
。因此
*headref->data
被解释为
*(headref->data)
这行不通。相反,使用
(*headref)->data
相当于((Node*)headref)->data
.
在 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
如上所示。
如果将运算符链接在一起,确保正确记住它们的优先级始终是个好主意。如所列 here,operator->
的优先级高于间接 *
。因此
*headref->data
被解释为
*(headref->data)
这行不通。相反,使用
(*headref)->data
相当于((Node*)headref)->data
.