Если вы сказали:
char buffer[SIZE];
char * ptr = & buffer[SIZE];
тогда да, это законно. В соответствии со стандартом C ++ вам, таким образом, разрешено использовать массив один за другим, и он широко используется при (например) работе с итераторами.
Редактировать: Но посмотрите комментарии Литба и Стива Джессопа. Если вы хотите быть полностью политически корректным, вы, вероятно, хотите:
char * ptr = buffer + SIZE;
В любом случае, адрес «один за другим» является действительным адресом - возможно, не совсем ясный вопрос (насколько я понимаю) заключается в том, разрешено ли вам разыменовывать его.