|
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
|
|||||||||||||
Понимание адреса, ссылки и указателя30.05.2012, 11:31. Показов 10101. Ответов 103
Метки нет (Все метки)
Гм... Конечно, стремно создавать подобную тему, однако, уж очень захотелось понять все это дело. Правда сколько раз ни пытался - не удавалось ни разу, возможно, потому что пытался разобраться самостоятельно (хотя, наверное, многие это постигают именно так). Но вот моя очередная попытка, которую решил так сказать обнародовать
Поэтому очень рассчитываю на вашу помощь и поддержку.Итак, начал практически с самого начала и уже сразу же зашел в тупик. Ниже приведен легенький код, демонстрирующий расположение переменных в памяти компа.
Разница, скажем, между 0x22ff6c и 0x22ff68 действительно 4. Но 4 чего - байта? А разве 4 в десятичной системе не 4? А в двоичной это разве не 100? Откуда тут 4 байта? Я понимаю, что там должно быть 4 байта, но не получается осознать, что 1 hex-единица у нас вдруг байт. Или это не так? В общем, на таком банальном я запутался ![]() Спасайте...
1
|
|||||||||||||
| 30.05.2012, 11:31 | |
|
Ответы с готовыми решениями:
103
Изменение адреса указателя Вывод адреса указателя Динамическое указание адреса указателя |
|
Полярный
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
|
|
| 30.05.2012, 12:01 | |
|
2
|
|
|
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
|
|
| 30.05.2012, 12:48 [ТС] | |
|
0
|
|
|
Полярный
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
|
|
| 31.05.2012, 08:37 | |
|
1
|
|
|
Модератор
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,245
|
||||||
| 31.05.2012, 11:00 | ||||||
|
В теме обсуждается понятие адреса переменной.
А в заголовке еще анонсирована ссылка и указатель. Вопрос: зачем? Кстати, сколько байт занимает переменная можно определить с помощью sizeof(тип):
2
|
||||||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
||
| 31.05.2012, 11:05 | ||
|
Объёмы данных измеряются в байтах и их производных (КБ, МБ, ГБ...), про биты забудь. Биты используются только при передаче данных через сеть. На локальной машине битов нет. Даже используя битовые операции, ты работаешь с байтами. Вместо &end напиши ((unsigned)&end) и адрес выведется в десятичной системе, чтобы вопросов у тебя не возникало лишних.
2
|
||
|
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
|
||||||||||||
| 31.05.2012, 11:17 [ТС] | ||||||||||||
|
zss, адрес - неотъемлемая часть указателя и ссылки
Но я до них еще дойду, т.к. с этим у меня вообще полная каша.Ребят, а подскажите, пожалуйста, почему 1) Объявляем переменные в таком порядке:
А адреса назначаются в обратном:
2) 0x22ff - это какой-то магический префикс? Почему адрес объявленных переменных всегда (ну может не всегда, но зачастую) начинается именно с него? Добавлено через 8 минут
0
|
||||||||||||
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
| 31.05.2012, 11:23 | |
|
Deviaphan просто имел ввиду не физическое наличие, а реальное использование, то есть по сути процессор работает с машинным словом, а не с каждым битом в отдельности. По поводу адресов - Вам так же уже сказали, что зависит от реализации компилятора, и что переменные не обязаны идти в каком то порядке и вообще находится рядом.
1
|
|
|
Модератор
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,245
|
|
| 31.05.2012, 11:28 | |
|
1
|
|
|
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
|
||||||||||
| 31.05.2012, 11:35 [ТС] | ||||||||||
|
Toshkarik,
Также в книге об этом написано:
Просто хочу понять каким образом (в данном локальном случае) действует компилятор. Почему объявление переменных происходит сверху-вниз, а размещение этих переменных снизу вверх? Разве при объявлении переменной не происходит моментального размещения этой переменной в памяти ну и соответствующего присвоения адреса? Добавлено через 2 минуты Пойду гуглить по этому поводу
0
|
||||||||||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
| 31.05.2012, 11:41 | |
|
0
|
|
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
| 31.05.2012, 11:41 | |
|
Вы можете забегать вперед, так как вопрос о классах памяти может обсуждаться дальше в книги.
0
|
|
|
34 / 33 / 6
Регистрация: 13.12.2011
Сообщений: 107
|
||||
| 31.05.2012, 11:49 | ||||
1
|
||||
|
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
|
||||||
| 31.05.2012, 12:04 [ТС] | ||||||
|
Toshkarik,
Правда, наверное, книга моя - "C++ для чайников" вряд ли предусматривает рассмотрение подобных вопросов .Лжец, Deviaphan, Мм.. Кажется начинаю понимать. После объявлении переменных в стеке вот такая картина:
Я правильно понял?
0
|
||||||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|||
| 31.05.2012, 12:14 | |||
|
f помещается по адресу: вершина стека - sizeof(f). Этот адрес становится новой вершиной стека. Здесь под стеком нужно понимать не контейнер, а тупо выделенный блок памяти. Никаких итераторов и операций нету. Т.е. это не std::stack, а системный стек. Всё, что он собой представляет, это указатель на вершину стека.
1
|
|||
|
34 / 33 / 6
Регистрация: 13.12.2011
Сообщений: 107
|
|||
| 31.05.2012, 12:15 | |||
Переменная получает адрес, следующая переменная получает адрес "выше" предыдущей, т.е. как бы "накладывается поверх".
1
|
|||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
| 31.05.2012, 12:17 | |
|
2
|
|
|
34 / 33 / 6
Регистрация: 13.12.2011
Сообщений: 107
|
|
| 31.05.2012, 12:20 | |
|
1
|
|
|
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
|
|
| 31.05.2012, 12:29 [ТС] | |
|
Бррр... Пошел на обдумку, что-то конкретно запутался теперь )))
0
|
|
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
| 31.05.2012, 12:43 | |
|
Я тут учусь работать в дизайнерской программе MS Paint, поэтому разработал для тебя небольшую схемку, которая поможет разобраться.
Или окончательно запутает...
1
|
|
| 31.05.2012, 12:43 | |
|
Помогаю со студенческими работами здесь
20
Передача указателя в функцию, присвоение адреса переменной и возврат
выделение памяти при увеличении адреса указателя на размерность int
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|