Consider these couple functions:
void foo (Fruit* bar);—pass the address of the object to the function. More efficience then pass an entire obejct to the function. The pionter must be dereference before it can be used or Using (->) operator to access memebers.
void foo (Fruit & bar);—similar to point, it works with the object directly, using (.) operator to access the fmembers.
void foo (const Fruit &* bar);—this prevent foo from modified bar by using const variable
One more main difference between pointer and reference:
Passing by pointer could actually pass with NULL pointer; however, reference is guaranteed to be a reference to a valid object.