|
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
|
|||||||||||||
Понимание адреса, ссылки и указателя30.05.2012, 11:31. Показов 10059. Ответов 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,243
|
||||||
| 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,243
|
|
| 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
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|