On 6/10/22 08:13, z wrote:

> arrays of arrays has different order for declaration and addressing,
> and declaring array of arrays has different order depending on how you
> declare it and wether it's static or dynamic array, *oof*)
>
> To give you an idea of the situation :
> ```D
>      int[3][1] a;//one array of 3 int
>      writeln(a[0][2]);//first "column", third "row"
> ```

I've written about this multiple times in the past but D's way is consistent for me. That must be because I always found C's syntax to be very illogical on this. To me, C's problem starts with putting the variable name in the middle:

  // C code:
  int a[1][3]; // Why?

So, first, D moves the variable to its consistent place: after the type:

  int i;
  int[N] arr;

Both of those are in the form of "type and then name". Good...

And then, here is the consistency with arrays: "type and then square brackets".

  int[] dynamicArray;
  int[N] staticArray;

So, here is where you and I differ:

  int[3][1] arr;  // Ali likes
  int[1][3] arr;  // z wants

I like it because it is consistently "type and then square brackets". (It so happens that the type of each element is int[N] in this case.) If it were the other way, than array syntax would be inconsistent with itself. :) Or, we would have to accept that it is inside-out like in C.

But of course I understand how it is seen as consistent from C's point of view. :)

And this is consistent with static vs dynamic as well because again it's "type and then square brackets":

  int[1][] a;  // A dynamic array of int[1]
  int[][3] b;  // A static array of 3 int[]s

Ali

Reply via email to