📅  最后修改于: 2022-03-11 14:44:55.164000             🧑  作者: Mango
There is no way to determine the length inside the function. However you pass arr,
sizeof(arr) will always return the pointer size. So the best way is to pass the
number of elements as a separate argument.
sizeof only works to find the length of the array if you apply it to the original array.
int arr[5]; //real array. NOT a pointer
sizeof(arr); // :)
However, by the time the array decays into a pointer, sizeof will give the
size of the pointer and not of the array.
void getArraySize(int arr[]){
sizeof(arr); // will give the pointer size
}
There is some reasoning as to why this would take place. How could we make things
so that a C array also knows its length? A first idea would be not having arrays
decaying into pointers when they are passed to a function and continuing to keep
the array length in the type system.
When you pass an array to a function it decays to pointer. So the sizeof function
will return the size of int *. This is the warning that your compiler complining
about