Home > Mobile >  Question regarding initialization of an array
Question regarding initialization of an array

Time:11-02

My problem: I have the following piece of code that is a wrapper for 2D square matrices in order to transpose them and print them. I cannot understand why we can write this:

arrayNN(T DATA[N][N]){
                n = N;
                data = DATA; }

In particular this line of code:data = DATA;.

My thoughts: As far as i know, in C/C you cannot give the values of a matrix to another matrix. For example this piece of code doesn't work, no matter how we write the definition of 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; 

Code: It works.

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

CodePudding user response:

T (*data)[N]; # a vector of N elements of pointers to datatype T = 2d matrix

No, data is not a vector or an array. Instead it is a pointer to an array of size N with elements of type T.

This means that when you wrote data = DATA; you're actually assigning the pointer DATA to the pointer data. Note that the function parameter DATA is a pointer and not an array. You can refer to What is array to pointer decay? for seeing why DATA is a pointer.

  • Related