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.