simendsjo <simen.end...@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

Reply via email to