На самом деле можно было бы сразу присвоить значение. Кажется, в учебниках так лишний раз напоминают, что можно объявить переменную без присваивания значения.
Такая запись означает, что этот код был написан до выхода стандарта C99, где объявления в блоке были обязаны идти до каких-либо операторов (в том числе оператора присваивания в ряде случаев) либо специально сделан совместимым с такими древними компиляторами.
ну потому что нет смысла присваивать значение какой то случайной ячейке памяти, к которой потом нельзя повторно обратиться и использовать это значение, поэтому выделенной ячейке памяти присваивают условное именованное значение указателя ссылающегося на эту ячейку памяти и называется эта фигня - переменная.