Существует только одно объявление
char *ptr ;
Оператор выражения
(char *) ptr = ptr1;
не будет компилироваться, поскольку в левой части используется временный объект, не являющийся lvalue из-за Cформа приведения.
Может быть, вы имеете в виду следующее
char ( *ptr ) = ptr1;
В данном случае это действительно объявление и оно совпадает с
char *ptr = ptr1;
Там, где существует разницаэто следующий пример
char * p[N];
и
char ( *p )[N];
Первое объявление объявляет массив из N элементов типа char *
. Второе объявление объявляет указатель на массив типа char[N]
.