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