Determining Array Size in a Passed Function
The problem arises in C , where determining the size of an array passed to a function poses a challenge due to the inability of sizeof to accurately capture the array's length.
One popular solution suggests terminating the loop when the array element array[i] reaches NULL. However, this approach can lead to errors, as array[i] sometimes contains random garbage values near the end of the array.
Template-Based Solution with Array References
C offers a more reliable solution through templates and array references:
template <typename T, int N> void func(T (&a)[N]) { for (int i = 0; i < N; ++i) a[i] = T(); // reset all elements }
This template-based function takes an array a of type T with a fixed size of N. By using the reference operator &, it binds the original array to a, allowing for access to the array's elements without passing the size explicitly.
To use this function, simply declare an array and pass it by reference:
int x[10]; func(x);
It's important to note that this solution applies only to arrays, not pointers. For pointer-based arrays, a better option is to use the Standard Template Library (STL) container std::vector, which provides size and element access capabilities.
The above is the detailed content of How Can I Reliably Determine the Size of an Array Passed to a C Function?. For more information, please follow other related articles on the PHP Chinese website!