On Thursday, March 01, 2018 21:16:54 Jamie via Digitalmars-d-learn wrote: > I'm trying to understand arrays and have read a lot of the > information about them on this forum. I think I understand that > they are set-up like Type[], so that int[][] actually means an > array of int[]. > > I create an array as per the following: > auto arr = new int[3][2][1]; > which produces:
Don't put the indices within the brackets. What you want is auto arr = new int[][][](3, 2, 1); With a new expression, unless you only have one dimension, you end up with dynamic arrays of static arrays. e.g. if you use what I wrote there with pragma(msg, typeof(arr).stringof); it prints int[][][] whereas with what you wrote, you get int[3][2][] which is a dynamic array of a static array of length 2 of static arrays of int of length 3 rather than a dynamic array of a dynamic array of a dynamic array of ints. Unfortunately, auto arr = new int[5]; and auto arr = new int[](5); are equivalent, so dealing with just single dimension arrays does not prepare you properly for dealing with multi-dimensional arrays. Arguably, it would have been better to just force using the parens, though that would make the most common case more verbose, so it's debatable. - Jonathan M Davis