在C++我想初始化一个双矩阵(2维双阵列)等我通常没有指针做像这样:C++多维数组初始化
double data[4][4] = {
1,0,0,0,
0,1,0,0,
0,0,1,0,
0,0,0,1
};
但是,由于我想返回和将它传递给函数,我需要它作为double**
指针。所以,基本上我需要以一种很好的方式初始化数据(如上所述),但之后我需要将指针保存到2D数组而不会在函数退出时丢失数据。
任何帮助? :-)
在C++我想初始化一个双矩阵(2维双阵列)等我通常没有指针做像这样:C++多维数组初始化
double data[4][4] = {
1,0,0,0,
0,1,0,0,
0,0,1,0,
0,0,0,1
};
但是,由于我想返回和将它传递给函数,我需要它作为double**
指针。所以,基本上我需要以一种很好的方式初始化数据(如上所述),但之后我需要将指针保存到2D数组而不会在函数退出时丢失数据。
任何帮助? :-)
除非你是讲究三分球,我宁愿在这里
void init(double (&r)[4][4]){
// do assignment
r[0][0] = 1;
}
int main(){
double data[4][4] = {
1.0,0,0,
0,1,0,0,
0,0,1,0,
0,0,0,1
};
init(data);
}
参考顺便说一句,如果你把它传递给函数在这种方式中,你将是“分配”,而不是“初始化” 。
初始化这样的临时变量,然后将其复制到动态分配的内存。
double (*)[4]
非常不同double **
只是勾画你的双打布局在两存储,你应该明白你为什么不能互换使用它们。
,因为我不知道或不明白“double(*)[4]”,所以我不能勾画它。这是什么意思? – Felix 2010-08-24 07:51:45
@Felix:这意味着“指向长度为4的double数组”。 – 2010-08-24 07:54:50
是你的所有矩阵的4x4?那我就简单地定义一个类与double[4][4]
成员,并通过该类的对象周围:
class Matrix
{
double m[4][4];
// ...
};
void function(const Matrix& matrix)
{
// ...
}
如果你需要不同尺寸的矩阵,但他们在编译时是已知的,使用模板:
template <size_t n>
class Matrix
{
double m[n][n];
// ...
};
template <size_t n>
void function(const Matrix<n,n>& matrix)
{
// ...
}
这样可以避免处理数组到指针的衰减,并使代码更具可读性。双维阵列的
首先,声明是不正确的。它需要做如下:
double data[4][4] = {
{1.0,0,0,0},
{0,1,0,0},
{0,0,1,0},
{0,0,0,1}
};
其次,通过它的功能,你可以不喜欢它
show(data);
在函数的声明,你需要给参数与数组除第一个以外的所有维度。因此,声明将是这样的:
void show(double arr[][4])
{
...
...
}
这传递数组作为参考wihout你需要使用一个指针。
希望这有助于。
谢谢!单线初始化是我一直在寻找的。 – 2015-10-21 04:34:35
这个怎么样(有指针,并做了你问什么)
#include <iostream>
using namespace std;
int refer(double (*a)[4])
{
cout<<"First value is "<<(*a)[0];
(*a)[0] = 37;
cout<<"changed value is "<<(*a)[0];
}
int main()
{
double data[4][4] = {
1.0,0,0,
0,1,0,0,
0,0,1,0,
0,0,0,1
};
refer(data);
return 0;
}
为什么你需要它作为一个'双**'? 'double(*)[4]'有什么问题? – 2010-08-24 07:16:40
这是C++。这可能是一个类,这个数组作为一个成员,当你调用成员函数时会传回一个引用吗? – 2010-08-24 07:23:28
[通过指针传递二维数组](http:// stackoverflow。com/questions/3515045/passing-two-dimensional-array-via-pointer)它是C,而不是C++,但它完全是同一个问题。 – 2010-08-24 07:28:21