让我们说我有这样的结构:
struct movies
{
string title;
int year;
} my_movie, *ptrMovie;
现在我这样访问my_movie
:my_movie.year = 1999;
现在要访问指针,我必须这样做:ptrMovie->year = 1999;
为什么指针使用->
运算符,普通数据类型使用.
运算符?有没有理由他们不能同时使用.
运算符?
答案 0 :(得分:9)
。 operator访问结构的成员,只能对结构变量进行操作。
如果要对指针执行此操作,首先需要取消引用指针(使用*
),然后访问该成员(使用.
)。像
(*ptrMovie).year = 1999
->
运算符是此的简写。
答案 1 :(得分:4)
.
运算符仅对结构或类有效。指针不是结构或类,因此您需要取消引用指针以获取它指向的结构/类,如此
(*ptrMovie).year
成员运算符.
的优先级高于解除引用运算符*
,因此您需要将解除引用操作括在括号中。或者你可以这样做
ptrMovie->year
两者都是等价的。 ' - >' operator是解除引用指针然后访问struct成员的快捷方式。在我看来,它更少打字,更好用。显然大多数人都同意我的观点,因为这是我在大多数代码中从指向结构的指针访问struct成员的标准方法。当你必须做多个间接层次时,你尤其欣赏它们的区别:
ptrToStruct->memberPtr->subMemberPtr->subsubPtr->subsubsubPtr->x
(*(*(*(*(ptrToStruct).memberPtr).subMemberPtr).subsubPtr).subsubsubPtr).x
这两个陈述都是等价的,但第一个陈述更容易使用。
答案 2 :(得分:2)
如果他们都使用过。你怎么能区分指针和实际对象? 对我来说:
->
让我想起一个指向某个东西的箭头,所以我觉得很棒 - >使用。
使用(*myPointer).
myPointer->