Чем указатель отличается от ссылки

Ссылка - это псевдоним - альтернативное имя для объекта.
Так например можно передавать объект в функцию по ссылке:

 void swap(int& i, int& j)
 {
   int tmp = i;
   i = j;
   j = tmp;
 }
 
 int main()
 {
   int x, y;
   ...
   swap(x,y);
   ...
 } 

Указатель - это переменная представляющая собой адрес в памяти другой переменной .
То есть указатель предоставляет возможность работать с памятью - над ним можно выполнять арифметические операции и таким образом выбирать другие области памяти.

Пара примечаний:
То есть у указателя главный "бонус" (в сравнении с сылкой)- возможность работать с памятью
ссылку в каком-то смысле можно трактовать как разыменованный константый указатель - действительно - "в общем случае" - с точки зрения проведения возможных операций ссылка предоставляет их множество, которое заключено во множестве операций, которые можно выполнить, если вместо неё передан указатель на объект .

_____________________________________________
Источники(читать подробнее)=
http://www.parashift.com/c%2B%2B-faq-lit...
и довольно мутно здесь = - http://forum.ixbt.com/topic.cgi?id=40:680
Ключевые слова и фразы(для поиска)=