On Friday, 14 March 2014 at 19:24:21 UTC, Chris Williams wrote:
[snip]
address pointing to an array of Arrays. So with an int[2][2]
array, you have a layout like:
@1000 Array(address=1016, length=2)
@1016 [Array(address=1048, length=2),Array(address=1056,
length=2)]
@1048 [1,2]
@1056 [3,4]
In this particular case, the data at 1056 is directly following
the data at 1048. There's no gap between them, so considering
the buffer at 1048 to be a single array of 4 or two arrays of
two is inconsequential. But that's no guarantee.
Actually this is guaranteed for static rectangular arrays:
http://dlang.org/arrays#static-arrays (see Rectangular Arrays)
http://wiki.dlang.org/Dense_multidimensional_arrays (Static
Arrays)
This code below is safe. It is nothing more than a check for
conformity followed by a memcpy:
int[] a = [1,2,3,4];
int[2][2] b = a;
I might raise a new question asking why this doesn't work as I
expect:
int[2][2] b;
b=a;
Thanks for your help on this one. It has forced me to drill into
the internals a bit more, which is always a good thing :)
Cheers,
ed