Documentation of D arrays
Sebastian Biallas
groups.5.sepp at spamgourmet.com
Thu Jan 11 16:51:44 PST 2007
Hello!
I'm trying to understand array handling in D. Unfortunately the official
documentation[1] is not very helpful..
[1] http://www.digitalmars.com/d/arrays.html
By trial and error I found out that arrays are passed by some COW magic
(where is this documentated?). So, if I want to change the content of an
array visible for the caller, I have to pass it with an inout-statement
(This works, but is it the canonical way?).
Next question: How can I initialize an array?
It seems like COW works only for parameters. Eg.
void foo(inout char[] s)
{
s = "blub";
}
void bar()
{
char[] s;
foo(s);
s[1] = 'a'; // will crash
}
So, how can I copy the string "blub" into s? s[] = "blub" doesn't work
because the .length won't be adjusted.
Oh, while writing this I noticed "blub".dup does work. It this the
preferred way or should I manually alter the .length?
So what exactly is T[]? According to the documentation it's a tuple
(pointer, length). So, if I pass a T[] to a function, pointer and length
are passed by value (unless I specify and (in)out statement)? Is this
some array magic or can I use this for own types?
I also found out that I can write
void foo(inout int[] a)
{
a ~= 1;
}
So "~=" does not only support T[] as RHS but also T. Where is the
documentation for this?
Sorry, if these are obvious questions, but I can't figure this out by
the official documentation (or I'm blind).
Regards,
Sebastian
More information about the Digitalmars-d
mailing list