2016-11-17 29 views
-2

我已声明的结构“节点”具有一个成员变量的“m”,然后访问结构限定两个变量如下使用指针

struct node t, *p; 

在程序后来我分配的t地址p

p = &t; 

要访问成员变量我需要使用p->m

但我想使用*算子,但是编写它*p.m会给出错误。为什么这样?

+3

嗯...什么是'a'? –

+0

使用'(* p).memberVariable'。 '.'优先级为1,'*'优先级为3. http://en.cppreference.com/w/c/language/operator_precedence – Arkadiy

+1

请问您可以告诉我们*为什么要使用解引用操作符?使用它你会在每次你写的时候再写两个字符,对于代码读者来说可能并不那么清楚。 –

回答

9

为此,你必须看到运营商的优先权。

运算符.的优先级高于*运算符。

写它像*p.m使编译器认为它是*(p.m)。您需要使用(*p).m

1

由于运算符优先级,*p.memberVariable将不起作用。做(*p).memberVariablep->memberVariable

2

这是因为operator precedence

表达式*p.memberVariable等于*(p.memberVariable)。即它试图取消p.memberVariable作为指针,而不是p。这会给你一个编译器错误,因为p是一个指向结构的指针,你可以使用点运算符来选择结构成员。

您需要明确告诉编译器使用括号取消引用指针p(*p).memberVariable