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

Return type of double **function()

本文关键字:类型 函数 返回      更新时间:2023-10-16

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

我犯了错误。

有人能告诉我正确的方法吗?或者建议一种替代方法。

提前谢谢。

数组和指针有很大不同。是的,数组一有机会就会转换为指向元素类型的指针,但并不意味着它们完全相同。

你试图在两者之间转换的实体在内存中有完全不同的布局:

  • 二维阵列由存储器中连续的两个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;
}

double **替换为多维std::vectorstd::arraystd::array<std::array<double, 2>, 2>)。然后,函数可以通过值返回多维数组。例如:

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;
}