我正在用c ++编写一个Arduino程序,并提出以下问题:
为什么这样做
double* getArray() {
double p, r, y;
double ret[3] = {p, r, y};
return ret;
}
Run Code Online (Sandbox Code Playgroud)
但事实并非如此
double* getArray() {
double p, r, y;
return {p, r, y};
}
Run Code Online (Sandbox Code Playgroud)
你的代码块都不起作用.
第一个编译,但在返回指向不再存在的数组的指针时引入未定义的行为.有关此问题的详细答案,请参阅本地变量的内存是否可以在其范围之外访问?
第二个代码块无法编译,因为{p, r, y}它不是a的有效初始化程序double*.
你真正需要的是一个std::vector<double>,std::array<double, some_constant_size>或者std::unique_ptr<double[]>.如果您不能使用其中任何一个,那么您需要动态创建数组,然后您需要记住删除该数组时,如果你不喜欢它
double* getArray() {
double * arr = new double[3]{1,2,3};
return arr;
}
int main() {
double* foo = getArray();
// use array here
delete [] foo;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3586 次 |
| 最近记录: |