ANSI C (C89) provides ONLY call by value parameter passing, but that
value can be a pointer
🙂 Array parameters are converted to
pointers, and the pointer is then passed by value.
A struct is passed by value (not automatically converted to a pointer
value), and you can of course modify such a struct in the called
routine. The issue is whether you intend changes to the struct
made in the called routine to occur in the actual parameter (pointer to
struct used as parameter value and explicitly dereferenced) or in
the local copy of a struct passed as a parameter.