For (dynamic) array and object parameters, which are passed by reference, in/out/ref apply only to the reference and not the contents. One last question: How about passing a huge structure. Does this need something like a pointer to the struct? I mean, is the passing done optimal here: struct S{ int n1=1; int n2=2; .. int n999=999; } void func(S s){ .. } void main (){ S t; func(t); .. }