返回双**函数()的类型
Return type of double **function()
我想编写一个返回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::vector
或std::array
(std::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;
}
相关文章:
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 将C++子类成员函数(虚拟实现)传递给 C 类型函数指针
- C++ 这里有一个返回 (24) 的布尔返回类型函数
- 使用SFINAE来检测void返回类型函数的存在
- 使用此类型函数有什么优势
- 为什么此函数通过类型函数指针调用后,呼叫明智地行为
- 如何使用无类型函数指针调用C++成员函数
- 模板返回类型函数如何在C++中工作
- 具有通用类型函数的动态库[C ]
- 如何在返回类型函数模板的专用化中使用派生类型?( "couldn't infer template argument" )
- Bon appetit :从 int 返回类型函数在 main() 中打印字符串
- 对于需要其他模板参数的类型函数的部分模板专业化
- c++错误的参数类型-函数指针
- 延迟评估模板类型函数
- 在引用或指针返回类型函数上输入
- 具有指针数据类型的非类型函数模板参数
- STL中使用的C++自定义比较类型(函数谓词与较少结构)
- C++模板基类的非类型函数模板的 using 声明
- 字符串到类型函数,模板专用化使调用统一
- 自由类型函数可以接受 Unicode 文件名吗?