Prototypes are the means for declaring a function, without giving enough details to implement it. A function may be declared many times but only defined once. Thus the compiler may encounter many prototypes--which are declarations--for a single function, but only one definition of that function.
Declaration tells the compiler only enough to call it. This includes the name of the function, the number of parameters it has, what the types of the parameters should be, what parameter passage mechanism to use for each parameter, and finally, what type of value should be returned.
Two common situations in which to use a prototype are: 1) when the definition of a function is presented after the first call to the function and 2) when the definition is already compiled and all that is needed is enough information to call the function.
Links:
More on function prototypes
Function Definition Overview