Это прекрасно определено. Ваш код гарантированно будет принят всеми компиляторами и никогда не потерпит крах во время выполнения. Указатели C / C ++ - это числовой тип данных, который подчиняется правилам арифметики. Работа сложения и вычитания, а скобочная запись [] - это просто причудливый синтаксис для сложения. NULL буквально целое число 0.
И именно поэтому C / C ++ опасны. Компилятор позволит вам создавать указатели, которые указывают куда угодно без жалоб. Разыменование дикий указатель в вашем примере, *array = 1234;
приведет к неопределенному поведению, от незначительного повреждения до сбоя.
Да, вы можете использовать его для индексации от 1. Не делайте этого! Идиома C / C ++ заключается в том, чтобы всегда индексировать с 0. Другие люди, которые видели индексирование кода с 1, будут склонны "исправить" его индексирование с 0.