是return*数组;有效的
Is return *array; valid?
像这样在C++中返回指向数组的指针有效吗?
int* function(int n){
int i;
for(i = 0; i<=n ; i++){
int array[i] = i;
}
return *array;
}
正确的方法是什么?
您的代码甚至还不可编译。如果你的意思是:
int *foo()
{
int x[5] = { 0 };
return x;
}
则此代码不正确,因为当foo()
返回时,数组x
将不存在,因此指针将不再指向有效存储。
选项包括:
- 让调用者分配空间,函数写入该空间
- 返回一个包含数组的容器,例如C中的
std::vector
++ - 返回一个指向C中动态分配的数组的指针。调用方必须记住
free
是和否。是,因为这是您应该返回的方式。否,因为您应该(并且必须)使用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]
创建一个数组,它会在函数结束时"消失"(这都是关于变量范围的)。
像这样在C++中返回指向数组的指针有效吗?
没有。您的示例根本无法编译:
error: ‘array’ was not declared in this scope
http://ideone.com/h17cH1
如果这个数组不是自动变量,那么返回一个指向数组的指针是可以的,所以在函数返回后它仍然存在。例如:
int* function(int n){
int * array = new int[i]();
return array;
}
虽然不漂亮,因为不清楚谁应该删除这个数组以及何时删除。
相关文章:
- 使用无符号字符数组有效存储内存
- 有效地计算多维数组的累积和?
- 计算数组重复次数的组合的有效算法,加起来达到给定的总和
- C++ 返回指向函数内定义的静态数组的指针是否有效?
- 声明后,gcc 的动态大小数组是否与标准数组有效相同?
- 如何有效地找到数组中三元组和的最小差异?
- 如何在C++中有效地将数字值重新分配给字符数组
- 如何有效地收集给定数组中的重复元素?
- 创建字符串数组的有效方法
- 如何在C++中有效地将数组移动到向量
- 在递归函数中更有效地创建对象和对象数组?C++
- 张量(多维数组)是树前瞻数据的有效存储类型吗?
- 有效地展平结构数组
- cpp 数组 - 分配常量索引有效,而非常量索引不起作用
- 如何在整数数组中有效地存储大量数字?C++
- 有效地从文本文件中读取带有字符串索引的大型二维数组(矩阵)
- 如何有效地使用 std::async 对指针数组执行操作
- 声明数组>> int arr[] 时出错;在C++(虽然在 Java 中有效)?
- 如何有效地用枚举填充 2D std::数组
- 这是arduino和C++的有效数组吗