Нет. В C вы можете получить только указатель на область хранения (что означает переменную, элемент массива или другой указатель; они называют эти «l-значения»), но не на любое выражение. Вы не можете получить указатель на выражения, которые не имеют определенной области хранения (например, сложение или результат вызова функции). Следует отметить, однако, что C ++ смешивает эти правила со ссылками, но для ясности я опущу это.
Указатели не магические: в конце концов, они просто целые числа. Таким образом, когда вы получаете указатель указателя, это как если бы вы получали указатель целого числа. У него больше нет последствий.
Например, если вы получите указатель на a
в своем коде, вы просто копируете этот адрес в другую переменную. Ничто не мешает вам изменить указанную переменную:
int a;
int* p = &a;
p = NULL;
И делая это, вы a
останетесь неизменными. Все, что вы можете изменить о a
, это его значение. Его адрес неизменен. Все остальное подразумевало бы, что &a = NULL
(или любое другое значение указателя) будет работать, а это не так.