Normally passing an array to a function makes it decay to a pointer. You implicitly pass the (start-)address of the array to the function. So you actually can't pass an array by value. Why don't you use va_args if you want to pass the contents by value?