On Wednesday, 29 January 2014 at 14:48:12 UTC, Cooler wrote:
If, however, in fun3 you change the size of the array - it may
reallocate. Like, if you're appending to `x` - it will
allocate a new array and make x point to it. Now `a` and `x`
point to distinct arrays. And any change you do using `x`
won't be seen by `a`. And, yes, this is the intended behavior.
That exactly what am i asking for!
You have to know the body of fun3() to predict what happened
with 'a'.
When I call fun() there are 3 intentions:
1. I want just send the contents of 'a' to fun(). It can be
done by a.dup, or you must sure that fun() has 'in' qualifier
for it's argument.
2. I want fun() change content of 'a' array. This can be done
by ensuring fun() has 'ref' qualifier for it's argument.
What intention should I have to call fun3()?
E.g. you want fun3 to change the content of the array, but you
don't want it to change the pointer.
Consider,
void fun2(ref int[] x)
{
x = null;
}
void fun3(int[] x)
{
x = null;
}
void main()
{
int[] a = [1, 2, 3];
fun3(a);
assert(a);
fun2(a);
assert(!a);
}