在C ++中返回指向数组的指针是否有效?
int* function(int n){
int i;
for(i = 0; i<=n ; i++){
int array[i] = i;
}
return *array;
}
什么是正确的方法?
答案 0 :(得分:1)
您的代码甚至无法编译。如果你的意思是:
int *foo()
{
int x[5] = { 0 };
return x;
}
然后此代码不正确,因为x
返回时数组foo()
不再存在,因此指针将不再指向有效存储。
选项包括:
std::vector
free
。答案 1 :(得分:0)
在C ++中返回指向数组的指针是否有效?
没有。你的例子根本不会编译:
error: ‘array’ was not declared in this scope
如果此数组不是自动变量,则返回指向数组的指针是可以的,因此在函数返回后它仍然存在。例如:
int* function(int n){
int * array = new int[i]();
return array;
}
不漂亮,但因为不明显谁应该删除这个数组以及什么时候。
答案 2 :(得分:0)
是和否。是的,因为这是你应该归还它的方式。不,因为您应该(并且必须)使用new[]
运算符(或malloc
函数)。所以基本上你应该写:
int* function(int n){
int i = 0;
int *array = new int[n]; // or c-style malloc(n*sizeof(int))
for(i = 0; i<=n ; i++){
array[i] = i;
}
return array;
}
为什么呢?因为如果你创建一个带有int array[i]
的数组,它将在函数结束时“消失”(它都是关于变量范围的)。