|
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
|
|||||||||||||
Понимание адреса, ссылки и указателя30.05.2012, 11:31. Показов 10336. Ответов 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
|
|
|
Модератор
13778 / 10971 / 6491
Регистрация: 18.12.2011
Сообщений: 29,258
|
||||||
| 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
|
|
|
Модератор
13778 / 10971 / 6491
Регистрация: 18.12.2011
Сообщений: 29,258
|
|
| 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
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|