Casting an array form an associative array
Timon Gehr
timon.gehr at gmx.ch
Sat Nov 10 08:48:42 PST 2012
On 11/10/2012 01:20 PM, Jacob Carlborg wrote:
> The following example:
>
> void main()
> {
> void[][size_t] aa;
> aa[1] = [1, 2, 3];
>
> if (auto a = 1 in aa)
> {
> writeln(*(cast(int[]*) a));
> writeln(cast(int[]) *a);
> }
> }
>
> Will print:
>
> [1, 2, 3, 201359280, 0, 0, 0, 0, 0, 0, 0, 0]
> [1, 2, 3]
>
> The first value seems to contain some kind of garbage. Why don't these
> two cases result in the same value?
>
The length of an array is the number of elements. sizeof(void)==1 and
sizeof(int)==4. The first example reinterprets the ptr and length pair
of the void[] as a ptr and length pair of an int[]. The second example
adjusts the length so that the resulting array corresponds to the same
memory region.
More information about the Digitalmars-d-learn
mailing list