指针c ++对象和变量

时间:2017-03-10 13:44:53

标签: c++ oop pointers

因为我目前正在学习C ++中的指针,所以我想知道语法。因此,当我想在对象上使用指针时,我不必取消引用它,以便访问类属性。当我只想在简单变量上使用指针时,我必须使用*来改变它的值。

那么为什么我不必使用*作为对象?因为我认为我只会更改内存地址。

对象:

int age = 20;
User John(age);    
User *ptrUser = &John;

ptrUser->printAge(); // 20 (why no *ptrUser->printAge()  ??? )
cout << ptrUser // 0x123456...

变量:

int a = 10;
int *ptrA = &a;   
*ptrA = 20;  
cout << a // 20

非常感谢!

2 个答案:

答案 0 :(得分:7)

你必须取消引用指针,->运算符只是取消引用和成员访问的语法糖:

而不是

ptrUser->printAge();
你可以写

(*ptrUser).printAge();

答案 1 :(得分:0)

实际上可以有两件事:

  1. 您不了解-> operator
  2. 正如@alain在答案中所指出的,->仅仅是语法糖,可以用*.代替:

    (*ptrUser).printAge();
    
    1. 您了解->运算符,并想知道为什么不*ptrUser->printAge()
    2. 在这里,当您说*ptrUser = &John;时,您将John的地址存储在名为ptrUser的指针变量中。换句话说,ptrUser指向John。因此,当您想要访问printAge()的成员函数John时,您可以执行以下操作:

      ptrUser->printAge();
      

      因为ptrUser已经指向John

      希望这有用。