Thread overview
How initialize a static rectangular array (2-d matrix)
Oct 09, 2009
Justin Johansson
Oct 09, 2009
Justin Johansson
Oct 09, 2009
Justin Johansson
Oct 09, 2009
Christopher Wright
Oct 09, 2009
bearophile
Oct 09, 2009
Ellery Newcomer
October 09, 2009
I almost have to apologize for this question but ..

How does one initialize a static rectangular array (2-d matrix) in D1?

None of the following or other variations that I've tried compile with DMD 1.0.

int[2, 3] matrix = [ 1, 2, 3,  4, 5, 6 ];

int[2, 3] matrix = [[ 1, 2, 3 ], [ 4, 5, 6 ]];

Thanks for all help.

October 09, 2009
On Thu, Oct 8, 2009 at 8:10 PM, Justin Johansson <no@spam.com> wrote:
> I almost have to apologize for this question but ..
>
> How does one initialize a static rectangular array (2-d matrix) in D1?
>
> None of the following or other variations that I've tried compile with DMD 1.0.
>
> int[2, 3] matrix = [ 1, 2, 3,  4, 5, 6 ];

..that's not how you declare a rectangular array type. It's int[3][2].

int[3][2] matrix = [[1, 2, 3], [4, 5, 6]];
October 09, 2009
Jarrett Billingsley Wrote:

> On Thu, Oct 8, 2009 at 8:10 PM, Justin Johansson <no@spam.com> wrote:
> > I almost have to apologize for this question but ..
> >
> > How does one initialize a static rectangular array (2-d matrix) in D1?
> >
> > None of the following or other variations that I've tried compile with DMD 1.0.
> >
> > int[2, 3] matrix = [ 1, 2, 3,  4, 5, 6 ];
> 
> ..that's not how you declare a rectangular array type. It's int[3][2].
> 
> int[3][2] matrix = [[1, 2, 3], [4, 5, 6]];

Of course.  Blonde moment.  Worked 18 hrs yesterday & not enough sleep. :-(

October 09, 2009
Jarrett Billingsley Wrote:

> On Thu, Oct 8, 2009 at 8:10 PM, Justin Johansson <no@spam.com> wrote:
> > I almost have to apologize for this question but ..
> >
> > How does one initialize a static rectangular array (2-d matrix) in D1?
> >
> > None of the following or other variations that I've tried compile with DMD 1.0.
> >
> > int[2, 3] matrix = [ 1, 2, 3,  4, 5, 6 ];
> 
> ..that's not how you declare a rectangular array type. It's int[3][2].
> 
> int[3][2] matrix = [[1, 2, 3], [4, 5, 6]];

Thanks Jarrett.

Am I having a blonde day?

   int[2,3] m = [ 1, 2, 3 ];
   writefln( "m=%s, .sizeof=%d", m, m.sizeof);

Compiles and prints:

m=[1,2,3], .sizeof=12

So what does that declaration, int[2,3], mean?

Think this is what threw me initially.

Thanks, Justin

October 09, 2009
Justin Johansson wrote:
> Jarrett Billingsley Wrote:
> 
>> On Thu, Oct 8, 2009 at 8:10 PM, Justin Johansson <no@spam.com> wrote:
>>> I almost have to apologize for this question but ..
>>>
>>> How does one initialize a static rectangular array (2-d matrix) in D1?
>>>
>>> None of the following or other variations that I've tried compile with DMD 1.0.
>>>
>>> int[2, 3] matrix = [ 1, 2, 3,  4, 5, 6 ];
>> ..that's not how you declare a rectangular array type. It's int[3][2].
>>
>> int[3][2] matrix = [[1, 2, 3], [4, 5, 6]];
> 
> Thanks Jarrett.
> 
> Am I having a blonde day?
> 
>    int[2,3] m = [ 1, 2, 3 ];    writefln( "m=%s, .sizeof=%d", m, m.sizeof);
> 
> Compiles and prints:
> 
> m=[1,2,3], .sizeof=12
> 
> So what does that declaration, int[2,3], mean?
> 
> Think this is what threw me initially.
> 
> Thanks, Justin

2,3 is a comma expression. Evaluate everything, and return the rightmost value.
October 09, 2009
Justin Johansson wrote:
> Jarrett Billingsley Wrote:
> 
>> On Thu, Oct 8, 2009 at 8:10 PM, Justin Johansson <no@spam.com> wrote:
> 
> Thanks Jarrett.
> 
> Am I having a blonde day?
> 
>    int[2,3] m = [ 1, 2, 3 ];
>    writefln( "m=%s, .sizeof=%d", m, m.sizeof);
> 
> Compiles and prints:
> 
> m=[1,2,3], .sizeof=12
> 
> So what does that declaration, int[2,3], mean?
> 
> Think this is what threw me initially.
> 
> Thanks, Justin
> 

It probably means DMD isn't doing enough validation checking.

Comma expression, hence typeof(m) is int[3], m.sizeof is 3 * int.sizeof
October 09, 2009
On Thu, Oct 8, 2009 at 10:05 PM, Christopher Wright <dhasenan@gmail.com> wrote:
> Justin Johansson wrote:
>>
>> Jarrett Billingsley Wrote:
>>
>>> On Thu, Oct 8, 2009 at 8:10 PM, Justin Johansson <no@spam.com> wrote:
>>>>
>>>> I almost have to apologize for this question but ..
>>>>
>>>> How does one initialize a static rectangular array (2-d matrix) in D1?
>>>>
>>>> None of the following or other variations that I've tried compile with DMD 1.0.
>>>>
>>>> int[2, 3] matrix = [ 1, 2, 3,  4, 5, 6 ];
>>>
>>> ..that's not how you declare a rectangular array type. It's int[3][2].
>>>
>>> int[3][2] matrix = [[1, 2, 3], [4, 5, 6]];
>>
>> Thanks Jarrett.
>>
>> Am I having a blonde day?
>>
>>   int[2,3] m = [ 1, 2, 3 ];   writefln( "m=%s, .sizeof=%d", m, m.sizeof);
>>
>> Compiles and prints:
>>
>> m=[1,2,3], .sizeof=12
>>
>> So what does that declaration, int[2,3], mean?
>>
>> Think this is what threw me initially.
>>
>> Thanks, Justin
>
> 2,3 is a comma expression. Evaluate everything, and return the rightmost value.
>

Bahahaha, oh comma exps.
October 09, 2009
Jarrett Billingsley Wrote:

> Bahahaha, oh comma exps.

Their usage will need to be quite regulated in D (using them for smarter purposes is a cute idea, but it may impair C compatibility).

Bye,
bearophile