【问题标题】:Regarding function returning pointer关于函数返回指针
【发布时间】:2019-12-29 08:32:40
【问题描述】:

我想澄清一些关于函数返回指针的事情。

我理解指针的概念,但如果从函数返回,我会感到困惑。

我了解到,当我们想从函数返回一些数据时,我们会在返回类型中写入数据类型,例如在返回 int 类型的数据的情况下,返回类型将为 int。

所以当我们想从函数返回某个变量的地址时,我们将返回数据类型写为某种​​指针类型,因为内存地址指向某种内存位置,这就是为什么返回类型是我想要的指针类型需要澄清的是,现在这意味着 c++ 中地址的数据类型是指针类型

【问题讨论】:

  • int 用于纯整数值。 int* 用于指向整数值的指针。就像平常一样。
  • 哦,记住你不能返回指向局部变量的指针,因为它们的生命周期随着函数返回而结束。
  • 您上面所说的似乎是正确的,很难知道您要澄清的是什么。但是,虽然返回指向局部变量的指针是合法的,但由于上面评论中提到的原因,它几乎肯定是一个错误。
  • 我认为如果你分享一些代码来澄清你的意思可能会有所帮助。
  • 不过,您可以返回指向函数的静态变量的指针。

标签: c++


【解决方案1】:

这是一般工厂函数的工作原理:

class HobNob;
...
HobNob* CreateHobNob()
{
    return new HobNob();
}
...
HobNob* myHobNob = CreateHobNob();

当然,在现实生活中我们永远不会使用裸指针,但总的想法是我们需要指针,因为我们不想传递 HobNobs(可能很大)而是处理(指针)到一个在堆上创建。我们现在还可以完全控制它的生命周期。

【讨论】:

  • 很抱歉打扰您了,您能用一些简单的话解释一下吗
  • HobNob 只是此示例的一个虚构名称。它可以替换为任何东西:CarCatArray
  • 我现在明白了
  • '在现实生活中我们永远不会使用裸指针' – 取决于...作为函数参数,它们可以是合适的(参见例如赫伯萨特的GotW 91)。承认,在 given 示例中,返回类型 wouldstd::unique_ptr...
  • @Aconcagua OP 开始了解指针是什么,在这个阶段不要把 GotW 扔给他们。首先坚持基础。
【解决方案2】:

返回指针的函数如下所示:

int* foo()
{
    // some code
    return intPointer; // assuming intPointer is of type int*
}

int* foo()
{
    // some code
    return new int; // return a newly created integer
}

如果你的函数应该创建一个类型的新对象并返回它。

int* foo()
{
    int* arr = new int[10]; // create an array dynamically
    // some code
    return arr; // return an array
}

如果你的函数应该返回一些数组。

显然,您可以将int更改为您想要的任何数据类型。

另外,正如其他人指出的那样,将局部变量的地址返回到函数外部并不是一个好主意,因此如果要这样做,则必须将局部变量定义为静态变量,否则这是未定义的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 2018-08-19
    • 2011-12-06
    • 1970-01-01
    • 2018-11-11
    相关资源
    最近更新 更多