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);
}

Reply via email to