Переменная - это просто абстракция.Это идея именованного значения, к которому вы можете обратиться, прочитать и (иногда, в зависимости от его типа) изменить.
То, где оно хранится в аппаратном обеспечении, является лишь подробностью реализации., Часто , они реализуются путем хранения данных по определенному адресу памяти и последующего использования этого адреса при каждом обращении к переменной, поэтому в этом смысле, как вы говорите, часто это «автоматически разыменованный указатель».
Но иногда переменная сохраняется в регистре, а не в памяти.Тогда у него нет адреса, и вы не можете создавать на него указатели.
Иногда он может даже не существовать в скомпилированном коде.Иногда компилятор может преобразовать код, так что переменная больше не нужна, или переменная может быть преобразована в одну постоянную времени компиляции.
В конечном счете, переменные существуют только в исходном коде.Как только ваш код выполняется, переменные больше не существуют.Некоторые переменные преобразуются в ячейки памяти, а некоторые полностью удаляются или преобразуются во что-то, что вы даже не распознаете как переменную.
Например, этот код:
int x = 10;
y += 10;
можетбыть скомпилированным путем представления x и y как областей памяти, а затем добавление выполняется с помощью инструкции, такой как «добавить значение из адреса памяти x в значение по адресу памяти y».
Но компилятор также можетзакодируйте константу 10 в самой инструкции, генерируя инструкцию «добавить 10 к значению по адресу памяти y».Конечно, x
была переменной в исходном исходном коде, но это больше не область памяти.Он кодируется непосредственно в поток команд.