返回一个指向数组的指针

发布于 2024-12-07 10:30:12 字数 665 浏览 0 评论 0原文

假设您有一个带有指向数组的私有指针的类。如何使用 getter 来访问(或有效复制数据),以便可以在不同的变量中访问它。

class MyClass
{
   private:
      double *x;
   public:
      myClass();
      virtual ~MyClass();
      double* getX() const;
      void setX(double* input);
};

MyClass::MyClass()
{
   double foo[2];
   double * xInput;
   foo[0] = 1;
   foo[1] = 2;

   xInput = foo;
   setX(xInput);
}

void MyClass::setX(double * input)
{
   x = input;
}

double * MyClass::getX() const;
{
   return x;
}

int main()
{
   MyClass spam(); // Construct object
   double * bar = spam.getX(); // This doesn't work
}

在这种情况下,bar[0]和bar[1]等于乱码:-9.2559631349317831e+061

Suppose you have a class with a private pointer to an array. How can you use a getter to access (or effectively copy the data) so you can access it in a different variable.

class MyClass
{
   private:
      double *x;
   public:
      myClass();
      virtual ~MyClass();
      double* getX() const;
      void setX(double* input);
};

MyClass::MyClass()
{
   double foo[2];
   double * xInput;
   foo[0] = 1;
   foo[1] = 2;

   xInput = foo;
   setX(xInput);
}

void MyClass::setX(double * input)
{
   x = input;
}

double * MyClass::getX() const;
{
   return x;
}

int main()
{
   MyClass spam(); // Construct object
   double * bar = spam.getX(); // This doesn't work
}

In this case, bar[0] and bar[1] are equal to jibberish: -9.2559631349317831e+061.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

彩虹直至黑白 2024-12-14 10:30:12
MyClass spam(); // Construct object

它不会构造一个对象,该对象声明一个名为 spam 的函数,该函数不接受任何参数并返回 MyClass。此默认构造一个对象:

MyClass spam; // Construct object

有关更多信息,请谷歌最令人烦恼的解析

更新:正如@Mark Ransom 指出的那样,您的代码还存在另一个问题。在构造函数中创建一个数组,然后设置 x 指向该数组。然而,一旦构造函数完成执行,数组的生命周期就结束了,因此进一步访问 x 将会崩溃(如果你足够幸运)。

MyClass spam(); // Construct object

That does not construct an object, that declares a function called spam that takes no arguments and returns a MyClass. This default constructs an object:

MyClass spam; // Construct object

For more information google the most vexing parse.

Update: As @Mark Ransom pointed out, there is another problem with your code. In your constructor you create an array, and then set x to point to such array. However the array lifetime ends once the constructor finishes execution, so further access to x would crash (if you are lucky enough).

2024-12-14 10:30:12

只是猜测,程序崩溃或显示错误的输出。这是因为构造函数正在设置一个指向本地数组的指针,该指针会离开作用域并在构造函数末尾被销毁。

Just a guess, the program is crashing or showing the wrong output. This is because the constructor is setting a pointer to a local array, which leaves scope and gets destroyed at the end of the constructor.

如歌彻婉言 2024-12-14 10:30:12

那可能应该是 *bar 而不是 bar[0]。

That should probably be *bar instead of bar[0].

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文