Компилятор занимается преобразованием переменных в нашем коде в области памяти, используемые в машинных инструкциях.
Расположение переменной-указателя зависит от того, где она объявлена в коде, но программистам обычно не приходится иметь дело с этим напрямую.
Переменная, объявленная внутри функции, живет в стеке или в регистре (если не объявлена как статическая).
Переменная, объявленная на верхнем уровне, находится в разделе памяти в верхней части программы.
Переменная, объявленная как часть динамически размещаемой структуры или массива, живет в куче.
Оператор «&» возвращает ячейку памяти переменной, но, в отличие от оператора «*», ее нельзя повторить.
Например, * * * i получает значение по адресу * * i, которое является значением по адресу * i, которое является значением, хранящимся в i, которое компилятор выясняет, как найти.
Но && я не буду компилировать. & i - это число, которое представляет собой область памяти, которую компилятор использует для переменной i. Этот номер нигде не хранится, поэтому && не имеет смысла.
(Обратите внимание, что если & i используется в исходном коде, то компилятор не может сохранить i в регистре.)