Вы не можете. Для этого вы должны использовать динамический контейнер, такой как вектор STL. Или же вы можете создать другой массив большего размера, а затем скопировать в него данные из вашего первого массива.
Причина в том, что массив представляет непрерывную область в памяти. В приведенном выше примере предположим, что p указывает на адрес 0x1000, а пять целых чисел соответствуют двадцати байтам, поэтому массив заканчивается на границе 0x1014. Компилятор может свободно размещать другие переменные в памяти, начиная с 0x1014; например, int i
может занимать 0x1014..0x1018. Если вы расширите массив так, чтобы он занимал еще четыре байта, что произойдет?