#c #pointers #theory #dereference #lvalue
#c #указатели #теория #Разыменование #значение lvalue
Вопрос:
Допустим, у меня есть это:
char *p = NULL;
Я уверен, что это было бы проблемой, поскольку я бы разыменовывал NULL
указатель:
*p = 16;
С другой стороны, я думаю, что это было бы нормально, потому что я получал бы адрес * p, который сам по себе не является NULL
:
char **pp = amp;p;
Прав ли я в обоих случаях?
Комментарии:
1.
s/the address of *p which/the address of p which/
Ответ №1:
Да, это так. Хотя значение p равно NULL, у него все еще есть действительный адрес, поэтому вы можете передать его ссылку.
Ответ №2:
Да, вы правы в обоих случаях.
Ответ №3:
Вы правы в обоих случаях. Просто чтобы добавить простое уточнение. Хотя вы назначаете
char **pp = amp;p;
Вы по-прежнему не можете получить доступ к ** pp, потому что он по-прежнему имеет значение NULL. Но вы можете безопасно получить доступ к * pp.