No, For arrays there's a special rule. Arrays can't be passed
as a whole by value (this would require a copy of the whole
array each time the function is called and thus would be rather
slow) so when an array is found in a context where a value is
expected (e.g. when an array is used as a function argument
but also at the right hand side of an assignment). Instead when
found in such a context ("value context") it is converted auto-
matically to a pointer to the first element of the array, and
this value (i.e. the pointer to the first element of the array)
is what gets passed to the function.
This isn't really passing the array by reference since within
the function you have no information anymore about the 'array-
ness' of the pointer the function received, e.g. you don't
have any information about the size of the array (unless
passed to the function as an additional argument) and can't
distinguish it from a pointer that points to something else
than an array.
The article you cite is a rather useless example for what this
special rule can be (mis-)used - and the accompanying text is
simply false, there is no "automatic memory allocation" (what-
ever that is supposed to be) happening at all, there's just an
one-element array of structures, which is an automatic variable.
Regards, Jens