I'm definitely nitpicking here, but I'd say almost all languages use pass-by-value, and what you're talking about is copying a pointer. C++ actually has true pass by reference, nothing is copied in memory.
In addition to pass by value and by reference, there's also a pass by descriptor mechanism. It's not widely supported, but it's just another way to glue different conventions for defining arrays in various languages, where it's not just a raw pointer to alloc'd memory.