Doubt - Static multidimension arrays

Mike Parker via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Jan 18 23:37:42 PST 2016


On Tuesday, 19 January 2016 at 07:21:39 UTC, albert00 wrote:
> On Tuesday, 19 January 2016 at 04:50:18 UTC, tsbockman wrote:
>> On Tuesday, 19 January 2016 at 03:20:30 UTC, albert00 wrote:
>>> [...]
>>
>> ... what you're making is an array *of arrays*:
>
> Maybe I was misunderstood, because in fact that is what I was 
> making an array of arrays, but my problem in fact was in 
> accessing it.
>
> Like I said above:
>
> I was declaring int[1][2] arr:
>
> But to access I need to invert the columns like:
>
> 	arr2[0][0] = 1;
> 	arr2[1][0] = 2;
>
>
>> int[10][5] a; // An array of 5 (int[10])
>
> Using your example, in my head I'd access the last element as:
>
> a[9][4] but that would give me an error:
>
> Error: array index 9 is out of bounds arr[0 .. 5]
>
> So I need to invert a[4][9].
>
> Again seems a bit strange "FOR ME" since I declare in one way 
> and access the other way.

Try not to think in terms of columns and rows. It makes more 
sense to think of it in terms of *types*.

Given the following array declaration, which is an array of int:

int[2] nums;

Then any index into nums (such as nums[0]) is going to return an 
int. The same logic applies given this array declaration, which 
is an array of int[2]:

int[2][5] numArrays;

Then any index into numArrays is going to return int[2] (for 
example, numArrays[0]). In order to access the members of the 
returned array, we need one more index, so that int[0][1] is the 
second element of the first array. In other words, it's shorthand 
for:

int[2] arr = numArrays[0];
int num = arr[1];

Seen in this light, it is entirely consistent and not strange at 
all. It just takes some people a bit of effort to stop thinking 
in terms of C's multidimensional arrays so that it becomes 
second-nature to see it in this light. I was using D for quite 
some time before I finally got used to it.




More information about the Digitalmars-d-learn mailing list