为什么指针使用 - >代替 。?

时间:2010-01-07 17:36:24

标签: c++ pointers struct

  

可能重复:
  Why does C have a distinction between -> and . ?

让我们说我有这样的结构:

struct movies
{
    string title;
    int year;
} my_movie, *ptrMovie;

现在我这样访问my_moviemy_movie.year = 1999;
现在要访问指针,我必须这样做:ptrMovie->year = 1999;

为什么指针使用->运算符,普通数据类型使用.运算符?有没有理由他们不能同时使用.运算符?

3 个答案:

答案 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->