If I want to write a function that operates on a struct struct S { } What are the differences between: void(S* s) void(ref S s) Also, for my general knowledge, is there a way to set default function parameters, such as scope or lazy?