Home > Article > Backend Development > Why Does `sizeof()` Behave Differently for Array Arguments in C Functions?
When sizeof() Behaves Differently in Functions for Array Arguments
In C , when passing an array to a function, it's essential to understand why sizeof() might not work similarly to when used in the main function.
Array Decay to Pointer
Unlike languages like Java, where arrays are true objects with methods and properties, in C , arrays are simply pointers. When an array is passed to a function as an argument, it decays to a pointer to the first element of the array.
sizeof() on Pointers vs. Arrays
In the main function, sizeof() applied to an array returns the total size of the array in bytes, including all its elements. However, when sizeof() is used on the decayed pointer to an array within a function, it returns the size of the pointer itself, which would usually be the size of an integer type (e.g., sizeof(int)).
Workaround for Determining Array Size
To determine the size of an array that has decayed to a pointer, the folgende code can be used:
int length_of_array(int* some_list) { // Not applicable here, but see below for when it might be return 0; }
Exception: Arrays Passed by Reference
There is one exception to the array decay rule. Arrays can also be passed by reference, allowing access to their size information. The syntax for this is:
template<size_t N> int length_of_array(int (&arr)[N]) { // Size of the array can be determined via the template parameter N return N; }
In this case, N represents the size of the array being passed, and it can be used to determine the array's length accurately.
The above is the detailed content of Why Does `sizeof()` Behave Differently for Array Arguments in C Functions?. For more information, please follow other related articles on the PHP Chinese website!