Arrays decay to pointers in function calls. It's not possible to compute the size of an array which is only represented as a pointer in any way, including using sizeof.
You must add an explicit argument:
void show(int *data, size_t count); In the call, you can use sizeof to compute the number of elements, for actual arrays:
int arr[] = { 1,2,3,4,5 }; show(arr, sizeof arr / sizeof *arr); Note that sizeof gives you the size in units of char, which is why the division by what is essentially sizeof (int) is needed, or you'd get a way too high value.
Also note, as a point of interest and cleanliness, that sizeof is not a function. The parentheses are only needed when the argument is a type name, since the argument then is a cast-like expression (e.g. sizeof (int)). You can often get away without naming actual types, by doing sizeof on data instead.