0
why is 1
hello, I want to get number of elements of a array, but I encounter a doubt about the following codes: /* correct array size */ #include <iostream> using namespace std; int main() { int numbers[100]; cout << sizeof(numbers) / sizeof(int); return 0; } /* uncorrect array size */ #include <iostream> using namespace std; // Define a function to get size of an array. int getSize(int arr[]) { return sizeof(arr)/sizeof(arr[0]); } int main() { int numbers[100]; cout << getSize(numbers); // the result is 1, why ? return 0; } So, why I get the result is '1' from 2nd program, Thank you !
4 Answers
+ 10
Arrays decay to pointers when passed as function parameters so sizeof is not going to help you.
Refer:
https://stackoverflow.com/questions/968001/determine-size-of-array-if-passed-to-function
+ 6
in simple word, when you pass an array to a function you send the first element of array to that function (as a pointer), so you get the size of the first element obviously
+ 2
You can use a template/generic.
#include <iostream>
using namespace std;
#include <iostream>
using namespace std;
template <typename T, int N>
int getSize(T (&arr) [N])
{
// You could just return N instead here though
// Or get rid of N completely using:
// template <typename T>
// int getSize(T &arr)
return sizeof(arr)/sizeof(arr[0]);
}
int main()
{
int numbers[100];
cout << getSize(numbers);
return 0;
}
+ 1
This is one of the reasons why you should use std::array, it keeps track of its own size without having to keep track of it yourself