Конечно, есть лучшие (как в - более читабельные) способы перебора массива. Например:
for (int index = 0; index < size; index++) {
if (p[index] > *max) {
max = &p[index];
}
}
Однако, как вы видите в присваивании max = ...
, проще иметь указатель на элемент массива, если вы хотите передать его другой переменной-указателю.
Относительно вашего второго вопроса - нет никакой внутренней ценности в установке его на nullptr
. Однако, чтобы предотвратить утечки памяти, вы должны освободить (освободить) память, зарезервированную с помощью оператора new
, используя оператор delete
, как только вы закончите работу с массивом, например:
delete [] p;
РЕДАКТИРОВАТЬ: Обратите внимание, что вы не сможете безопасно разыменовать указатель max
(то есть вы не можете прочитать, что int
он указывает на выражение *max
) после освобождения массива, не вызывая Undefined Поведение и, возможно, сбой вашей программы, потому что ваша программа вернет зарезервированную память ОС и не будет иметь к ней доступа.
Спасибо @ user4581301 за указание на это.