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