返回双**函数的类型()

时间:2015-12-11 10:21:19

标签: c++ arrays multidimensional-array initialization

我希望编写一个返回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;
}

我有错误。

任何人都可以告诉我正确的方法或建议另一种方法来做到这一点。

提前谢谢。

2 个答案:

答案 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::vectorstd::arraystd::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;
}