Ale*_*lex 7 c++ arrays pointers return function
可能重复:
通过指针从C和C++中的函数返回本地数据
我需要创建一个没有返回数组的参数的函数
我收到错误:"警告:函数返回局部变量的地址"
我的代码已经简化,便于阅读
int * getNums()
{
int nums[8];
nums = {1,2,3,4,5,6,7,8};
return nums;
}
Run Code Online (Sandbox Code Playgroud)
我被领导明白,当函数结束时指针丢失,但数组仍然会被发送?如果没有,在函数调用中返回没有参数的整数数组的好方法是什么?
提前感谢您的帮助!
干杯
小智 7
不,阵列不会被"发送".您需要执行以下操作之一:
在大多数情况下,最后一个是首选解决方案.
假装你不知道C-arrays是什么,并加入现代C++的世界:
#include <array>
std::array<int, 8> getNums()
{
std::array<int, 8> ret = {{ 1, 2, 3, 4, 5, 6, 7, 8 }};
return ret;
}
Run Code Online (Sandbox Code Playgroud)
如果您的编译器太旧而无法提供std::或std::tr1::实现array<>,请考虑使用boost::array<>.或者,考虑使用std::vector<>任何一种方式.
我了解到,当函数结束时,指针会丢失,但数组是否仍会被发送?
该行为是未定义的。
在函数调用中返回没有参数的整数数组的好方法是什么?
int nums[8];
Run Code Online (Sandbox Code Playgroud)
num是驻留在堆栈上的局部变量。您无法返回局部变量的引用。nums相反,使用运算符分配new并记住delete[]它。
int* getNums()
{
int *nums = new int[8] ;
// .....
return nums ;
}
// You should deallocate the resources nums acquired through delete[] later,
// else memory leak prevails.
Run Code Online (Sandbox Code Playgroud)