【问题标题】:C++ Pointing to a dynamically created memory [closed]C ++指向动态创建的内存[关闭]
【发布时间】:2021-05-05 05:32:12
【问题描述】:

让我先说我是一个 C++ 新手,完全是新手,现在正在学校学习。我被难住的一个问题是动态创建的内存以及如何指向它。对于我的作业,我创建了内存,在控制台中打印,然后我的任务是指向我在作业开始时动态创建的内存。我怎么做?我必须创建一个临时变量或某种类型的引用变量,但我只是不确定如何。

    // Task 1
//int *p;
int j = 18;
int *p = new int(2);
cout << "Dynamically created integer: " << *p << endl;
*p = j;
cout << "Named integer: " << *p << endl;
cout << "Return to dynamically created integer: " << *p << endl;
delete p;

我有 *p 的倒数第二行,这是不正确的,我只需要以某种方式指向第三行代码。谢谢!

【问题讨论】:

  • 您似乎在您的作业描述中缺少至少一个步骤。具体来说:“指向我在分配开始时动态[分配的]内存”当执行的唯一步骤是打印某些内容时,这是相当微不足道的。由于没有任何改变,你已经回到了你开始的地方。 (证明代码中*p = j; 行的步骤在哪里?)

标签: c++ memory dynamic dynamic-memory-allocation


【解决方案1】:

您对指针的工作原理有一点误解。我们会在这里更正它。

*p = j;

您认为这会将p 更改为指向j。它不是。但让我们继续吧。

cout << "Named integer: " << *p << endl;

您现在认为这显示了p 现在指向的内容。在下一行,您希望 p 指向之前的内容。

除了p 总是指向同一个东西,一直。这一行:

*p = j;

p 指向j。这会将p 指向的值设置为j 的值。这是一个非常微妙的区别。要将p 更改为指向j,正确的语法是:

p = &j;

但是,在这一点上,恢复原始指针在逻辑上变得不可能。你必须先保存它:

int *old_p=p;
p = &j;

那么,在你打印出p现在指向的东西之后,你可以简单地恢复它:

p=old_p;

现在第二个打印语句将显示 p 指向的原始值。

【讨论】:

    【解决方案2】:

    据我了解,您正在尝试获取 j 的内存位置,为此您可以使用“地址”( & )运算符,例如 'std::cout >> “j 的内存地址 =” > > &j >> '\n';'

    【讨论】:

      猜你喜欢
      • 2013-03-07
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      • 2015-05-19
      • 1970-01-01
      • 2020-06-28
      • 2017-06-26
      • 2012-12-11
      相关资源
      最近更新 更多