返回局部变量C++的指针
Returning a pointer of a local variable C++
我需要创建一个返回指向整数的指针的函数。
这样:
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 运算符)。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错