On Sat, 07 Jun 2014 20:56:13 +0000 Paul via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com> wrote:
> Dynamic array is really reference. Right? But why modification of > parameter in this case does not work: > > void some_func(string[] s) { > s ~= "xxx"; s ~= "yyy"; > } > > but this works: > > void some_fun(ref string[] s) { > s ~= "xxx"; s ~= "yyy"; > } > > In the 1st case s is reference too, is not it? The first case just slices the array, so it refers to the same data, but the slice itself is a different slice, so if you append to it, it doesn't affect the original slice, and it could then result in a reallocation so that the two slices don't even refer to the same data anymore. You should read this: http://dlang.org/d-array-article.html - Jonathan M Davis