返回局部变量C ++的指针

时间:2013-09-27 04:09:31

标签: c++ function pointers

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

像这样:

int * count()
{
    int myInt = 5;

    int * const p = &myInt;

    return p;
}

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

提前感谢您的帮助!

5 个答案:

答案 0 :(得分:9)

使用新操作符

int * count()
{
    int myInt = 5;

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

    return p;
}

正如其他答案所指出,这通常是一个坏主意。如果你必须这样做,那么也许你可以使用智能指针。有关如何执行此操作,请参阅此问题 What is a smart pointer and when should I use one?

答案 1 :(得分:6)

你可以使用智能指针。

例如:

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

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

cout << "Value is " << *count() << endl;

答案 2 :(得分:5)

您可以通过变量static

来完成此操作
int* count()
{
    static int myInt = 5;
    return &myInt;
}

答案 3 :(得分:2)

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

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

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

答案 4 :(得分:2)

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

int * myInt = new int(5);

这不是局部变量BTW,意味着它没有自动存储,你必须自己delete内存

然而,使用这样的指针通常是不必要的,并且未经修改。最好在函数外部创建一个int,并让函数作为参考。

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

顺便说一句我不知道你打算如何使用这个变量但是因为你还建议使用全局变量,你可能想要使用@JonathanPotter建议的static var。在许多方面,静态变量类似于全局变量(两者都具有静态存储持续时间)