Могут ли эти операции с указателем C вызвать проблемы? - PullRequest
1 голос
/ 04 мая 2011

Допустим, у меня есть это:

char *p = NULL;

Я уверен, что это будет проблемой, поскольку я буду разыменовывать указатель NULL:

*p = 16;

С другой стороны, я думаю, что это будет нормально, потому что я получу адрес * p, который не NULL сам по себе:

char **pp = &p;

Прав ли я в обоих случаях?

Ответы [ 3 ]

5 голосов
/ 04 мая 2011

Да, вы. Хотя значение p равно NULL, оно по-прежнему имеет действительный адрес, поэтому вы можете передать его ссылку.

4 голосов
/ 04 мая 2011

Да, вы правы в обоих случаях.

1 голос
/ 04 мая 2011

Вы правы в обоих случаях. Просто чтобы добавить простое уточнение. Хотя вы назначаете

char **pp = &p;

Вы по-прежнему не можете получить доступ к ** pp, потому что он все еще имеет значение NULL. Но вы можете безопасно получить доступ к * pp.

...