Да, указатель - это обычная переменная, которая имеет значение и занимает некоторую память.Причина ошибки, которую вы получаете, не имеет к этому никакого отношения, но просто потому, что вы пытаетесь объявить две разные вещи с одним и тем же именем.
И, конечно, вы можете иметь указатели на указатели или даже указатели науказатели на указатели или даже больше уровней этого безумия.Единственный вопрос будет в том, как их использовать.Я могу представить себе множество вариантов использования указателей на указатели.Для большего количества уровней я могу только представить себе вид использования «массива массивов», но это все же что-то.
Но то, что вы не должны делать, это хранить значения неправильного типа в переменной.Если у вас есть указатель на указатель, вы должны хранить там адрес некоторого указателя (правильного типа), ничего больше, например:
int a;
int *b = &a;
int **c = &b;
В этом примере было бы абсолютно неправильно хранитьзначение a в c, хотя это возможно на платформах, где int и указатели имеют одинаковый размер.Но это все равно, что хранить текстовую строку в - абсолютно бессмысленно и опасно.