Вызовут ли эти операции с указателями на C проблемы?

#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.