Complete example:
#include <stdio.h>
void test(int arr[]) {
int arrSize = (int)(sizeof(arr) / sizeof(arr[0]));
printf("%d\n", arrSize); // 2 (wrong?!)
}
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;
}
Before passing it to a function, sizeof gives me the correct value. Doing the exact same thing on the exact same array in the function gives weird results. There’s one element missing. Why?
When you pass an array into a function in C, the array decays into a pointer to its first element. When you use
sizeofon the parameter, you are taking the size of the pointer, not the array itself.If you need the function to know the size of the array, you should pass it as a separate parameter:
Also note that, for a similar reason (taking the
sizeofa pointer), thesizeof(point)/sizeof(point[0])trick doesn’t work for a dynamically allocated array, only an array allocated on the stack.