好吧,我在这里查看代码,这个想法很难理解.
#include <iostream>
using namespace std;
class Point
{
public :
int X,Y;
Point() : X(0), Y(0) {}
};
void MoveUp (Point * p)
{
p -> Y += 5;
}
int main()
{
Point point;
MoveUp(&point);
cout << point.X << point.Y;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
好吧,所以我相信创建了一个类,声明了X和Y,并将它们放在构造函数中
创建一个方法,参数是Point*p,这意味着我们将把构造函数的指针放在函数内部;
现在我们创建一个名为point的对象然后调用我们的方法并将指针地址放在其中?
指针只是寻址一个像0x255255这样的内存号吗?
为什么没有宣布?
(int * p = Y)
Run Code Online (Sandbox Code Playgroud)
什么是内存地址?它可以用作参数吗?
p
被宣布.
void MoveUp (Point * p)
{
p -> Y += 5;
}
Run Code Online (Sandbox Code Playgroud)
是一个函数,它将指向a Point
并向其Y值添加5.它与以下内容没有什么不同:
void f(int n) {
printf ("%d\n", n);
}
:
int x = 7;
f(x);
Run Code Online (Sandbox Code Playgroud)
你不会说n
在那种情况下没有定义.它是同p
你的情况.
也许代码中的一些注释会有所帮助:
#include <iostream>
using namespace std;
class Point
{
public :
int X,Y;
Point() : X(0), Y(0) {} // Constructor sets X and Y to 0.
};
void MoveUp (Point * p) // Take a Point pointer p.
{
p -> Y += 5; // Add 5 to its Y value.
}
int main()
{
Point point; // Define a Point.
MoveUp(&point); // Call MoveUp with its address.
cout <<point.X << point.Y; // Print out its values (0,5).
return 0;
}
Run Code Online (Sandbox Code Playgroud)
指针只是间接的一个层次.在代码中:
1 int X;
2 int *pX = &X;
3 X = 7;
4 *pX = 7;
Run Code Online (Sandbox Code Playgroud)
第3和第4行的效果是相同的.那是因为pX
是一个指针,实际上X
是*pX
,内容.pX
X
在你的情况下,p->Y
是(*p).Y
,或者Y
指向的类的成员p
.