ЮК
Юрий Крючков

C++.Указатели и взятие адреса.

Ребят обьясните пожалуйста "на русском языке" как работают указатели и взятие адриса в С++.Я уже вторую книгу читаю и не вкурю про указатели. На счёт & один вопрос. Если не будет этой операции & то что будет храниться в ячейке выделеной памяти под эту переменную?

Андрей
Андрей

"Если не будет этой операции & то что будет храниться в ячейке выделеной памяти под эту переменную? "
То есть под указатель? Случайный набор битов, как и в любой нестатической переменной.

P.S.
"Многие программисты на Си просто не знают, как заставить работать указатели. Я, как правило, не отказываюсь от кандидата из-за отсутствия у него какого-то навыка. Однако я обнаружил, что понимание указателей в Си — это не навык, а способность. В начале первого курса на факультете кибернетики набирается человек 200 вундеркиндов, писавших в четырехлетнем возрасте игрушки для Atari 800 на BASIC'е. Они хорошо проводят время, изучая Паскаль, но в один прекрасный день профессор заводит речь об указателях, и они внезапно перестают понимать. То есть абсолютно. 90% потока переходит на отделение политологии, обьясняя это тем, что на кибернетике мало симпатичных студенток. На самом же деле, по неизвестной причине часть человечества просто рождается без того отдела мозга, который понимает указатели. Указатели — это не навык, а способность, требующая особого мышления, и некоторые люди им просто не обладают. "
(Джоэл о программировании)

Mihal
Mihal

Надо понимать, что вообще делает компилятор и что такое память. Память - это в первом приближении набор ячеек, доступных по адресам, т. е. по адресу 100 записано "10", по адресу 101 - "20" и т. д.

Когда мы пишем
int a;
компилятор это понимает как "выделить память размером в один int и запомнить, что a ссылается именно туда". Предположим, что адрес a - 200. Тогда запись
a=10;
компилятор поймет как "записать в ячейку памяти 200 значение 10".
А когда мы пишем &a, компилятор берет адрес ячейки, т. е. 200. Например
int *b=&a;//в b записан адрес a, т. е. 200
a=5;//в ячейку 200 записано 5
*b=10; //в ячейку, адрес которой хранится в b, т. е. ячейку 200, записано 10
printf("%d",a);//вывести a - содержимое ячейки 200, т. е. 10

Гена
Гена

я тож не понимаю и никогда не понимал. не вижу в них осбого смысла (

Похожие вопросы
[C++] Фигня какая-то с указателями
Как достать указатель из TList на C++ и присвоить его другому указателю?
Имеет ли Microsoft Flash Player постоянные указатели на адрес памяти? Или указатели на указатели?
Имеет ли Adobe Flash Player постоянные указатели на адрес памяти? Или указатели на указатели?
C# работа с указателями в unsafe
использовать адрес статической (или квазистатической) переменной как указатель
C++ передача функции или указателя на функцию в метод
Вы пытаетесь зайти на проект Ответы@Mail.ru c IP-адреса 77.109.139.26. Возможно, этот IP-адрес является адресом прокси-
Указатели динамического массива, функции, c++
Зачем в с++ указатель инициализируют 0, если ему не присвоили адрес переменной?