我希望编写一个返回2D数组或矩阵的函数。这是我的尝试:
double **function(){
double d[2][2] = { { 1.1, 1.2 }, { 2.1, 2.2 } };
return d; //Error: return type does not match the function type.
}
int main(){
double d[2][2] = function(); //Error: initialization with '{...}' expected for aggregate object.
return 0;
}
我有错误。
任何人都可以告诉我正确的方法或建议另一种方法来做到这一点。
提前谢谢。
答案 0 :(得分:3)
数组和指针是完全不同的。是的,数组做在第一次机会时转换为指向元素类型的指针,但不意味着它们完全相同。
您尝试转换的实体在内存中的布局完全不同:
double
的数组组成,这两个数组在内存中是连续的。double
指针的指针是指针到double
的数组。虽然两者都可以在具有相似类似使用体验的形式下使用,但它们在程序中的处理方式完全不同。
可以执行此操作(假设您使用C ++ 11或更高版本的编译器进行编译):
#include <array>
std::array<std::array<double, 2>, 2> function() {
std::array<std::array<double, 2>, 2> d = { { { 1.1, 1.2 } , { 2.1, 2.2 } } };
return d;
}
int main(){
std::array<std::array<double, 2>, 2> d = function();
return 0;
}
答案 1 :(得分:1)
将double **
替换为多维std::vector
或std::array
(std::array<std::array<double, 2>, 2>
)。然后,您的函数可以按值返回多维数组 。 E.g:
std::array<std::array<double,2>, 2> function() {
std::array<std::array<double,2>, 2> d = { { { 1.1, 1.2 }, { 2.1, 2.2 } } };
// Check http://stackoverflow.com/questions/17759757/multidimensional-stdarray on the syntax to initialize this.
return d;
}
int main(){
std::array<std::array<double,2>, 2> d = function();
return 0;
}