Steven Schveighoffer: > I think of an array as a hybrid between a reference and a value type. The > data is passed by reference, the length is passed by value. This mean > changing the length only affects the local copy, but changing the data > affects all arrays that point to that data.
Let's play some more :-) The data is passed by pointer value, the length is passed by value: void foo1(ref int[2] arr) { int[2] a = [10, 20]; arr = a; } void foo2(int[] arr) { int[2] a = [10, 20]; arr = a; } void main() { int[2] arr; arr = [1, 2]; foo1(arr); assert(arr == [10, 20]); arr = [1, 2]; foo2(arr); assert(arr == [1, 2]); } Bye, bearophile