Используя арифметику указателей, вы можете определить, ссылается ли инициализированный указатель на массив или отдельную переменную, например, кодирование чего-то вроде этого поможет вам, добавив, что «1», вы будете указыватькомпилятор получает доступ к следующей позиции, в которой находится адрес памяти переменной 'a', если он указывает на NULL, то в соседней позиции 'a' не было выделено никакой памяти, поэтому обычно это будетуказатель на одну переменную.
int *a = new int [3] {1,2,3};
if (*(a+1)==NULL)
cout<<"single variable";
else
cout<<"array";