You all are missing the point as to what the cost of passing arrays by value or what other languages do.

 

C is implicitly a pass/return by value language for EVERY SINGLE POSSIBLE DATATYPE WITH THE EXCEPTION OF ARRAYS.

Arrays are special for no reason other than it was thought to costly to do it any otherway.   In fact, had it not been kludged up into a pseudo-pass-by-reference,

nobody would have probably been the wiser.   It was too hard to pass/return structs by value either in the initial compilers, but they fixed it to work exactly that way.

 

So we have this array kludge that works differently than everything else.    Further, due to the kludgosity, it’s not even exactly type safe.