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

Returning a pointer of a local variable C++

本文关键字:指针 C++ 局部变量 返回      更新时间:2023-10-16

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

这样:

int * count()
{
    int myInt = 5;
    int * const p = &myInt;
    return p;
}

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

提前感谢任何帮助!

你可以使用智能指针。

例如:

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

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

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

使用新运算符

int * count()
{
    int myInt = 5;
    int * p = new int;
    *p = myInt;
    return p;
}

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

您可以通过

将变量设置为static来执行此操作:

int* count()
{
    static int myInt = 5;
    return &myInt;
}

如果你想正确地返回变量的指针,你必须做类似的事情。

int * myInt = new int(5);

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

但是,使用这样的指针通常是不必要和不明智的。最好在函数外部创建一个 int 并让函数引用。

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

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

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

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

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