## digitalmars.D - Questions about multidimensional arrays - returning and initializing

Antti =?iso-8859-1?Q?Syk=E4ri?= <jsykari gamma.hut.fi> writes:
```I've been doing a OpenGL homework app in D lately, and during this
process I've implemented some vector and matrix operations using arrays.
There are some problems, however.

1) How do I return a multidimensional 3x3 array from a function?

float[3][3] identity()
{
const float[3][3] result = [[1,0,0],[0,1,0],[0,0,1]];

return result;
}

Doesn't work:
tst.d(2): functions cannot return static array float[3][3]

This is confusing, because returning just float[3] _is possible!

Consequently, I'm mostly forced to use float[][] instead of float[3][3],
with the convention that it's 3x3.  (A great part of my old code uses
float[3][3] and changing them would require plenty of work, so it might
be better to rewrite it all.)

However, there comes the next question:

2) Which is the easiest way to allocate and initialize an float[][] of
size 3x3?

This does not work:

float[][] mtx = new float[3][3];

("cannot implicitly convert float[3][] to float[][]")

So far I've found that this is the best way:

float[][] mtx = new float[][3];
result[0].length = result[1].length = result[2].length = 3;

But it is a bit clunky. Is there a better way?

(Probably writing my own array and matrix structs would be one...)

-Antti

--
I will not be using Plan 9 in the creation of weapons of mass destruction
to be used by nations other than the US.
```
Jun 13 2004
Antti =?iso-8859-1?Q?Syk=E4ri?= <jsykari gamma.hut.fi> writes:
```In article <slrnccpr0c.jmt.jsykari pulu.hut.fi>, Antti Sykäri wrote:
1) How do I return a multidimensional 3x3 array from a function?

2) Which is the easiest way to allocate and initialize an float[][] of
size 3x3?

Plus,

3) The easiest way to convert between float[][] and float[3][3]?

float[3][3] my_mtx;
float[][] another_mtx = make_3x3_identity_mtx();
for (int i = 0; i < 3; ++i)
for (int j = 0; j < 3; ++j)
my_mtx[i][j] = another_mtx[i][j];

(and vice versa...)

This doesn't quite cut it.

My suggestion would be just making multidimensional arrays first-class
values.

All in all, during this night I've just suddenly learned that arrays are
very confusing. Dynamic and fixed-size arrays look the same, but
actually are not quite compatible. Somehow I have the feeling that this
will confuse the hell out of newbies coming from a language with just
one kind of array.

-Antti
```
Jun 13 2004
Norbert Nemec <Norbert.Nemec gmx.de> writes:
```Antti Sykäri wrote:

I've been doing a OpenGL homework app in D lately, and during this
process I've implemented some vector and matrix operations using arrays.
There are some problems, however.

A proposal for multidimensional arrays on language level is online:
http://homepages.uni-regensburg.de/~nen10015/documents/D-multidimarray.html
Walter has shown general interest in it, but it will certainly need some
more time until the proposal converges to some real solution. I already
realized that my concepts of static and dynamic arrays were not identical
to those used in D so far. (My idea was to give static arrays full value
semantics. Currently, they are returned as references.)

Currently, there might be workarounds for your problems. Looking for real
solutions will probably prove difficult.

Ciao,
Nobbi
```
Jun 13 2004