gpt4 book ai didi

c++ - 对指针及其内存地址的混淆

转载 作者:太空宇宙 更新时间:2023-11-04 14:37:36 25 4
gpt4 key购买 nike

好吧,我在这里看一段代码,这个想法很难理解。

#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;
}

好吧,所以我相信创建了一个类,声明了 X 和 Y,并将它们放在构造函数中

创建了一个方法,参数是Point * p,这意味着我们要把构造函数的指针放在函数里面;

现在我们创建一个名为 point 的对象,然后调用我们的方法并将指针地址放入其中?

指针地址不就是像 0x255255 这样的内存号吗?

为什么 p 从来没有声明过?

(int * p = Y)

内存地址到底是什么?它可以用作参数吗?

最佳答案

p 已声明

void MoveUp (Point * p)
{
p -> Y += 5;
}

是一个函数,它将接受一个指向 Point 的指针并将其 Y 值加 5。它与以下内容没有什么不同:

void f(int n) {
printf ("%d\n", n);
}
:
int x = 7;
f(x);

你不会说 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;
}

指针只是一种间接级别。在代码中:

1   int X;
2 int *pX = &X;
3 X = 7;
4 *pX = 7;

第3行和第4行的效果是一样的。这是因为 pX 是指向 X 的指针,所以 *pXpX 的内容,实际上是 X.

在您的情况下,p->Y(*p).Y 或类的 Y 成员相同由 p 指向。

关于c++ - 对指针及其内存地址的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3024691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com