c++ - double **function() 的返回类型

标签 c++ arrays multidimensional-array initialization

我想编写一个返回二维数组或矩阵的函数。这是我的尝试:

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

关于c++ - double **function() 的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34221170/

相关文章:

c++ - 如何使 Boost dylibs 在 os x 上通用(i386 和 x86_64)?

c++ - String Vector 程序在输入前退出

javascript - 如何使用纯 JavaScript 循环遍历数组

java - 丰富矩阵与非丰富矩阵

java - NoSuchElementException 二维数组

c++ - 如何使用 MSTest 为 C++ 测试设置数据驱动测试?

c++ - 生产中可选的非终端

arrays - 如何在 Flutter 中组合两个数组?

c++ - C++ 中二维数组中的 foreach 循环

javascript - 谷歌散点图只连接几个点