digitalmars.D.learn - Casting an array form an associative array
- Jacob Carlborg (18/18) Nov 10 2012 The following example:
- Timon Gehr (6/22) Nov 10 2012 The length of an array is the number of elements. sizeof(void)==1 and
- Jacob Carlborg (4/9) Nov 10 2012 Ok, thanks for the explanation.
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? -- /Jacob Carlborg
Nov 10 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.
Nov 10 2012
On 2012-11-10 17:48, Timon Gehr wrote: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.Ok, thanks for the explanation. -- /Jacob Carlborg
Nov 10 2012