C and C++ allows passing of structure and objects by value to function, although prevents passing arrays by values.
Why?
I'm not actually aware of any languages that support passing naked arrays by value. To do so would not be particularly useful and would quickly chomp up the call stack.
Edit: To downvoters - if you know better, please let us all know.