13

我需要创建一个返回指向 int 的指针的函数。

像这样:

int * count()
{
    int myInt = 5;

    int * const p = &myInt;

    return p;
}

由于指针只是一个地址,并且变量 myInt 在调用此函数后被销毁。如何在此方法中声明一个 int 以在内存中保留一个位置,以便稍后通过返回的指针访问它?我知道我可以在函数外部全局声明 int,但我想在函数内部声明它。

提前感谢您的帮助!

4

5 回答 5

12

使用新运算符

int * count()
{
    int myInt = 5;

    int * p = new int;
    *p = myInt;

    return p;
}

正如其他答案中指出的那样,这通常是一个坏主意。如果您必须这样做,那么也许您可以使用智能指针。请参阅此问题以了解如何执行此操作 什么是智能指针以及何时应该使用它?

于 2013-09-27T04:18:02.310 回答
9

您可以使用智能指针。

例如:

unique_ptr<int> count()
{
   unique_ptr<int> value(new int(5));
   return value;
}

然后您可以按如下方式访问整数:

cout << "Value is " << *count() << endl;
于 2013-09-27T04:37:06.967 回答
8

您可以通过创建变量来做到这一点static

int* count()
{
    static int myInt = 5;
    return &myInt;
}
于 2013-09-27T04:15:46.963 回答
3

返回指向局部变量的指针是错误的。x 指向堆上分配的变量:

link x = new node(a[m]);
Thus x isn't pointing to a local variable.

返回指向局部变量的指针是错误的原因是这样的变量仅在函数处于活动状态时才存在(即在进入和退出之间)。在堆上分配的变量(例如使用 new 运算符)一直存在,直到它们被释放(例如使用 delete 运算符)。

于 2013-09-27T04:17:09.750 回答
3

如果要正确返回变量的指针,则必须执行类似的操作。

int * myInt = new int(5);

这不是局部变量顺便说一句,这意味着它没有自动存储,您必须delete自己存储

然而,使用这样的指针通常是不必要且不建议的。最好在函数外部创建一个 int 并让函数引用。

void count(int & i)
{
    i = 5;
}

顺便说一句,我不知道您打算如何使用该变量,但由于您还建议使用全局变量,您可能希望使用static@JonathanPotter 首先建议的 var。在许多方面,静态变量类似于全局变量(两者都有静态存储持续时间)

于 2013-09-27T04:18:30.663 回答