我的問題: 我有以下代碼,它是 2D 方陣的包裝器,以便轉置并列印它們。我不明白為什么我們可以這樣寫:
arrayNN(T DATA[N][N]){
n = N;
data = DATA; }
特別是這行代碼:data = DATA;.
我的想法: 據我所知,在 C/C 中,您不能將矩陣的值賦予另一個矩陣。比如這段代碼不管怎么寫b的定義都行不通:
double array[3][3] = { {11,12,13},{21,22,23},{31,32,33}};
//only one definition
//double **b;
//double *b[3]
double b[3][3];
b = array;
代碼:有效。
#include <iostream>
using namespace std;
template <typename T, size_t N>
class arrayNN {
private:
int n;
T (*data)[N]; # a vector of N elements of pointers to datatype T = 2d matrix
public:
arrayNN(): n(N), data(NULL) {};
arrayNN(T DATA[N][N]){
n = N;
data = DATA;
}
void print(ostream &out){
for(int i = 0;i<N;i ){
for(int j=0;j<N; j ){
cout << data[i][j] << '\t';
}
cout << endl;
}
}
void transpose(){
for(int i = 0;i<N;i ){
for(int j=0;j<i; j ){
T temp = data[i][j];
data[i][j] = data[j][i] ;
data[j][i] = temp;
}
}
}
};
int main(){
double array[3][3] = { {11,12,13},{21,22,23},{31,32,33}};
arrayNN<double,3> A(array);
A.print(cout);
A.transpose();
A.print(cout);
return 0;
}
uj5u.com熱心網友回復:
T (*data)[N];# 指向資料型別 T = 2d 矩陣的 N 個元素的向量
不,data不是向量或陣列。相反,它是一個指向N具有 type 元素的T大小陣列的指標。
這意味著當您撰寫時,data = DATA;您實際上是在將指標分配給DATA指標data。請注意,函式引數DATA是指標而不是陣列。可以參考什么是陣列到指標衰減?看看為什么DATA是一個指標。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/524603.html
標籤:C 指针模板矩阵包装
