Because when you pass an array's name into a function, that incoming parameter is converted to a pointer to the first element - regardless of whether you declare that incoming parameter with a * or []s void foo( int *array ) IS EQUIVALENT TO void foo( int array[] ). In fact, even if you declare: void foo( int array[MAX_SIZE] ) Once you are inside foo, sizeof will tell you that sizeof(array) is still just the sizeof any pointer on that system and all you would be doing is limiting your acceptable inputs to arrays of exactly MAX_SIZE capacity.