## Multidimensional Array

The Partridge Family were neither partridges nor a family. Discuss.
aslanbey0158
Posts: 31
Joined: April 15th, 2017, 10:48 am

### Multidimensional Array

I have a matrix like a[3][3] (float) ,

void function(float a[][],b[])

i can't send this matrix into funtion. How can i send matrix to function

Yumtard
Posts: 571
Joined: January 19th, 2017, 10:28 pm
Location: Idiot from northern Europe

### Re: Multidimensional Array

I would've made a matrix class. Else you could use vectors.

If it's stricly 3x3 matrices you can also do this

void function(float a[3][3])

aslanbey0158
Posts: 31
Joined: April 15th, 2017, 10:48 am

### Re: Multidimensional Array

But function doesn't take matrix,it want vector.
The problem is this.

chili
Posts: 3910
Joined: December 31st, 2011, 4:53 pm
Location: Japan
Contact:

### Re: Multidimensional Array

The problem, is this.
Chili

aslanbey0158
Posts: 31
Joined: April 15th, 2017, 10:48 am

### Re: Multidimensional Array

i wrote my function in main class;it works well.
İ wanted to throw this function to

void function( float a[][],float b[]) <----

function doesnt take matrice ,it wants vector
How can i solve this problem?

Yumtard
Posts: 571
Joined: January 19th, 2017, 10:28 pm
Location: Idiot from northern Europe

### Re: Multidimensional Array

Just rewrite the signature, I don't understand your problem.

If you want vectors then something beautiful like this:
void function( const std::vector<std::vector<int>>& a, const std::vector<int>& b )

or create a matrix class and just change the signature so it takes a matrix instead.

If you need more help, please post all the code

chili
Posts: 3910
Joined: December 31st, 2011, 4:53 pm
Location: Japan
Contact:

### Re: Multidimensional Array

You need to read up on pointer decay of arrays. https://stackoverflow.com/questions/146 ... y-decaying
you don't pass arrays by value, they become pointers.

If you wanna avoid that, use std::array<std::array>, or pass the array by reference. Passing by reference will lock you down to a specific dimensionality, but you can use templating to make your life easier in that regard. You can do a nested vector as well. You can pass as a flat array (i.e. as a pointer, remember above), and then do the index calculation yourself. You can create your own custom type that does one of these things and encapsulates the implementation away. You can do so many things. So many options.
Chili

albinopapa
Posts: 4039
Joined: February 28th, 2013, 3:23 am
Location: Oklahoma, United States

### Re: Multidimensional Array

As stated by chili

void function( float arr[3][3] ){ }

float matrix[3][3];
function( matrix );
is the same as
void function( float* arr ){};
function( matrix ) // still works

void function( float(&arr)[3][3] ){ }

Now the function ONLY takes in 2D C-arrays with 3 elements per dimension, but you are actually passing in the "matrix" and can return values with it.

If you are needing nested std::vector, then do what Yumtard said.
void function( std::vector<std::vector<float>>& _matrix );

Or, as chili pointed out, you can go from a flattened 1D array to 2D array with a bit of math:
for(int i = 0; i < 9; ++i ){
int column = i % 3;
int row = i / 3;
}

or from 2D array to 1D array
int index = column + ( row * num_columns );

Here's a partial Matrix class that might be useful.

Code: Select all

``````class Matrix
{
public:
Matrix()=default;
Matrix( float _00, float _01, float _02,
float _10, float _11, float _12,
float _20, float _21, float _22 );

float operator()( int Column, int Row )const
{
return elements[Row][Column];
)
float& operator()( int Column, int Row )
{
return elements[Row][Column];
}
float elements[3][3];
};

Matrix Identity( ){
Matrix matrix;
for( int j = 0; j < 3; ++j )
{
for( int i = 0; i < 3; ++i )
{
if( i == j )
matrix( i, j ) = 1.f;
else
matrix( i, j ) = 0.f;
}
}
return matrix;
}``````
If you think paging some data from disk into RAM is slow, try paging it into a simian cerebrum over a pair of optical nerves. - gameprogrammingpatterns.com