а.int i;
б.int *address;
c.address = &i;
В строке объявлена целочисленная переменная с именем i
.Когда это сделано, компилятор резервирует область памяти размером sizeof(int)
(это 4 байта на моем компьютере).Если вы хотите обратиться к этому пространству памяти, то вам нужно использовать указатели.
В строке b объявляется переменная с именем address
, которая имеет специальное свойство.Эта переменная не содержит int
, но хранит адрес переменной типа int
.Следовательно, какое бы значение address
ни имело, его следует интерпретировать как адрес переменной типа int
.В настоящее время переменная address
не содержит в ней никакого адреса памяти, поскольку мы еще не определили, какой адрес памяти она должна хранить.
Строка c может быть прочитана как «адрес равен адресу памяти переменной i
».Теперь адрес переменной хранит адрес памяти переменной int
i
.
int main(){
int a;
int &b;
b=&a;
a=10;
return 0;
}
Когда этот код запускается с использованием отладчика, я вижу:
a = 10 // the variable's value
b = 0x7fffffffe2fc // this is the address at which 'a' is stored.
Указателиочень мощный, и вы начнете использовать его чаще, как только вы поймете это.Помимо материалов, которые другие предложили вам прочитать, я предлагаю использовать отладчик (gdb) и запустить несколько программ с указателями в нем и проверить каждую переменную, которую вы объявили в коде.Я понимаю вещи лучше, когда у меня есть визуальная картина любой проблемы, и я думаю, что это может также ускорить ваше понимание указателей.