В чем разница между указателями в си?
Есть понятие стека. Стек небольшого размера: на нём большие объекты лучше не выделять. Поэтому необходима ещё и куча -- там выделяют память с помощью malloc.
Помимо этого, в первом и втором случае различается время жизни объектов. Объект, выделенный на стеке живёт до конца области видимости (до закрывающейся фигурной скобки обычно). Объект выделенный в куче живёт пока его явно не удалят (с помощью метода free, который вы забыли вызвать). Т.е. такие динамически выделенные объекты ещё и удобны, если вам надо передать сам объект и/или управление его временем жизни в другую часть программы.
Ну и если вы хотите модифицировать любой объект (не важно как созданный) в какой-то сторонней функции, то вам надо передать указатель на этот объект. Насколько я помню, в C ссылок нет.
PS
По C лучше K&R читайте.
Есть еще символ & который позволяет описывать переменные, доступ к которым синтаксически ничем не отличается от прямого доступа но по факту это ссылка:class MyClass
{
public int value;
MyClass(int _value):value(_value){}
}

MyClass *tmp=new MyClass(10);
MyClass &object=*tmp;
object.value=20;
delete(tmp);
99% различий кроются в способах инициализации (и освобождении памяти), и в последние 10 лет  в c++ наплодили столько изменений именно вокруг этого.
Причина - попытка получить больше контроля над памятью объектов, чтобы у компилятора было больше возможностей по ее освобождению.
p.s. используйте & для определения типов параметров передаваемых в функции, чтобы происходило не копирование а передача по ссылке, и при этом синтаксически вы бы работали с объектами напрямую.