Because the array is being passed by value, an exact copy of the array is made and placed on the stack.
This is incorrect: the array itself is not being copied, only a copy of the pointer to its address is passed to the callee (placed on the stack). (Regardless of whether you declare the parameter as int[]
or int*
, it decays into a pointer.) This allows you to modify the contents of the array from within the called function. Thus, this
Because the array passed to
byval_func()
is a copy of the original array, modifying the array within thebyval_func()
function has no effect on the original array.
is plain wrong (kudos to @Jonathan Leffler for his comment below). However, reassigning the pointer inside the function will not change the pointer to the original array outside the function.