【问题标题】:pointer c++ on objects and variables对象和变量上的指针 c++
【发布时间】:2017-03-10 13:44:53
【问题描述】:

因为我目前正在学习 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

非常感谢!

【问题讨论】:

  • 所以这不是 C.
  • 你研究过-&gt;是什么意思吗?
  • 你可能想退后一步,find a good book
  • 在我看来你没有注意到“。”和 "->' 是不同的运算符。
  • var->Foo() 是 (*var).Foo()

标签: c++ oop pointers


【解决方案1】:

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

而不是

ptrUser->printAge();

你可以写

(*ptrUser).printAge();

【讨论】:

    【解决方案2】:

    实际上可能有两件事:

    1. 您不知道-&gt; operator

    正如@alain 在他的回答中指出的那样,-&gt; 只是语法糖,可以用*. 替换为:

    (*ptrUser).printAge();
    
    1. 您知道-&gt; 运算符并想知道为什么不知道*ptrUser-&gt;printAge()

    在这里,当您说*ptrUser = &amp;John; 时,您将John 的地址存储在一个名为ptrUser 的指针变量中。换句话说,ptrUser 指向John。所以,当你想访问John的成员函数printAge()时,你可以简单地这样做:

    ptrUser->printAge();
    

    因为ptrUser 已经指向John

    希望这有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-01
      • 1970-01-01
      • 2011-02-11
      • 2010-12-20
      • 2021-06-19
      • 1970-01-01
      • 2013-07-26
      • 1970-01-01
      相关资源
      最近更新 更多