在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