指向结构的指针的成员访问语法

时间:2010-06-04 05:20:23

标签: c++ c pointers struct member

#include <iostream>

typedef struct _person
{
    std::string name;
    unsigned int age;
}Person;

int main()
{
    Person *pMe = new Person;
    pMe->age = 10;
    pMe->name = "Larson";

    std::cout << "Me " << (*pMe).age << " " << (*pMe).name.c_str() << std::endl;

    return 0;
}

考虑上面的代码。可以通过两种方式引用结构的成员。例如,pMe->age(*pMe).age。这只是一种语法差异,还是这两种方法有任何功能差异?

2 个答案:

答案 0 :(得分:1)

基本上它是一样的。但是,解除引用运算符(*)和指针访问运算符(->)都可以为类类型重载,因此可以为每个类型提供不同的行为。然而,这是一个非常特殊的情况,而不是你的样本中的情况。

答案 1 :(得分:1)

这只是一种语法差异,可以找到差异的原因here

因为通过指针访问结构体和类成员的语法很笨拙,所以C ++提供了第二个成员选择运算符( - &gt;),用于从指针中进行成员选择。因此两条线都是等价的。 - &gt;运算符不仅更容易键入,而且也更不容易出错,因为没有优先级问题需要担心。因此,当通过指针进行成员访问时,请始终使用 - &gt;操作