Arrays passed by almost reference?

Frank Benoit keinfarbton at googlemail.com
Thu Nov 5 13:18:39 PST 2009


Ali Cehreli schrieb:
> I haven't started reading Andrei's chapter on arrays yet. I hope I won't find out that the following behavior is expected. :)
> 
> import std.cstream;
> 
> void modify(int[] a)
> {
>     a[0] = 1;
>     a ~= 2;
> 
>     dout.writefln("During: ", a);
> }
> 
> void main()
> {
>     int[] a = [ 0 ];
> 
>     dout.writefln("Before: ", a);
>     modify(a);
>     dout.writefln("After : ", a);
> }
> 
> The output with dmd 2.035 is
> 
> Before: [0]
> During: [1,2]
> After : [1]
> 
> I don't understand arrays. :D
> 
> Ali
> 

int[] a;
a is kind of a pointer, one with the extra length information.
When passed to modify(), a is passed by-value, the contained data is
certainly passed by-reference since a points to the data.

This is why the a.length was not updated.

If you change "modify" to :
void modify(ref int[] a){...

it should work as you expected.



More information about the Digitalmars-d mailing list