Static arrays passed by value..?
Simen kjaeraas
simen.kjaras at gmail.com
Sat Aug 7 10:47:00 PDT 2010
simendsjo <simen.endsjo at pandavre.com> wrote:
> The spec for array says:
> Static arrays are value types. Unlike in C and D version 1, static
> arrays are passed to functions by value. Static arrays can also be
> returned by functions.
>
> I don't get the "static arrays are passed to functions by value" part.
>
> Here I am passing in a static and dynamic array. Both are passed by
> value, and the function can modify the array of both
>
> {
> void func(int[] arr, void* ptr) {
The problem is here ^^
What your function signature is saying, is 'pass arr to me as if a
dynamic array'. If you want to pass a static array, define the function
like this, and you will see magic at work:
void func( int[3] arr, void* ptr ) {
> arr[0] = 9;
> assert(&arr != ptr);
> }
>
> int[3] a = [1,2,3];
> func(a, &a);
This call is equivalent to func( a[], &a );. Since your function says
to treat the array as dynamic, a slice is created from your static array.
> assert(a == [9,2,3]); // changed..
>
> int[] b = [1,2,3];
> func(b, &b);
> assert(b == [9,2,3]);
> }
--
Simen
More information about the Digitalmars-d-learn
mailing list