Home >Backend Development >C++ >Why Does `sizeof()` Return Different Values for Arrays Inside and Outside a Function in C?
Why Passing an Array to a Function Alters Its sizeof() Value
In C programming, passing an array to a function can lead to unexpected behavior regarding its size when retrieving it using sizeof(). This peculiarity arises due to the concept of array decay.
Array Decay Explained
When an array is passed to a function, it is implicitly converted or "decays" into a pointer to its first element. This conversion effectively hides the array's true size, as sizeof() now operates on the pointer rather than the original array.
Example with Code
Consider the following code snippet:
#include <stdio.h> void test(int arr[]) { int arrSize = (int)(sizeof(arr) / sizeof(arr[0])); printf("%d\n", arrSize); // 2 (incorrect) } int main(int argc, const char * argv[]) { int point[3] = {50, 30, 12}; int arrSize = (int)(sizeof(point) / sizeof(point[0])); printf("%d\n", arrSize); // 3 (correct) test(point); return 0; }
In this example, two calls to sizeof() are made. The first call, within the main() function, correctly returns the size of the array point as 3. However, the second call within the test() function incorrectly returns 2. This result mismatch occurs because the array point decayed into a pointer when it was passed to the function.
Overcoming Array Decay
To preserve the true size of an array when passed to a function, one must explicitly pass an additional parameter to the function that specifies the size.
void test(int arr[], size_t elems) { /* ... */ } int main(int argc, const char * argv[]) { int point[3] = {50, 30, 12}; /* ... */ test(point, sizeof(point)/sizeof(point[0])); /* ... */ }
By passing the size as a separate parameter, the function can accurately determine the true size of the array and perform operations accordingly.
Note:
The sizeof(point)/sizeof(point[0]) trick to obtain the array size may not always work for dynamically allocated arrays.
The above is the detailed content of Why Does `sizeof()` Return Different Values for Arrays Inside and Outside a Function in C?. For more information, please follow other related articles on the PHP Chinese website!