Я бы рекомендовал подумать об этом по-другому. Вместо того, чтобы думать о нулевом указателе как о «нулевом адресе памяти», думайте о нем как «этот указатель фактически ни на что не указывает».
С этой ментальной моделью, есть более ясная причина, почему вам нужна проверка на ноль. Если у вас есть указатель, который на самом деле ни на что не указывает, то запись
*a *= 2;
является бессмысленной операцией - нет ничего, на что указывает указатель a
, поэтому разыменуйте a
, чтобы получить integer, а затем удвоение этого целого числа не является четко определенной операцией.
Внутренне, в большинстве систем, yes nullptr
реализован как «указатель на нулевой адрес памяти, который считается недействительным в большинстве операционных систем. , "но я не думаю, что это проливает свет на то, почему этот код нуждается в нулевой проверке.