Possible Duplicate:
Sizeof array passed as parameter
I am being stupid with this sizeof operator in c++, do you have any idea why it is 4 and 12 ?
void function (int arg[]) {
cout<<sizeof(arg)<<endl; // 4
}
int main ()
{
int array[] = {1, 2, 3};
cout<<sizeof array<<endl; // 12
function (array);
return 0;
}
In main
, the name array
is an array so you get the size in bytes of the array with sizeof
. However, an array decays to a pointer when passed to a function, so you get sizeof(int*)
inside the function.
Be aware that taking an argument in the form of T arg[]
is exactly the same as taking the argument as T* arg
. So your function is the exact equivalent of
void function(int* arg) {
cout << sizeof(arg) << endl;
}
void function (int arg[]) // or void function (int arg[N])
is equivalent to
void function (int *arg)
thus,
sizeof(arg) == sizeof(int*)
If you intend to pass array itself, then C++ offers you to pass it by reference:
void function (int (&arg)[3])
// ^^^ pass by reference
Now,
sizeof(arg) == sizeof(int[3])
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With