1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
|
|||||||||||
1 | |||||||||||
Понимание адреса, ссылки и указателя30.05.2012, 11:31. Показов 8161. Ответов 103
Метки нет (Все метки)
Гм... Конечно, стремно создавать подобную тему, однако, уж очень захотелось понять все это дело. Правда сколько раз ни пытался - не удавалось ни разу, возможно, потому что пытался разобраться самостоятельно (хотя, наверное, многие это постигают именно так). Но вот моя очередная попытка, которую решил так сказать обнародовать Поэтому очень рассчитываю на вашу помощь и поддержку.
Итак, начал практически с самого начала и уже сразу же зашел в тупик. Ниже приведен легенький код, демонстрирующий расположение переменных в памяти компа.
Разница, скажем, между 0x22ff6c и 0x22ff68 действительно 4. Но 4 чего - байта? А разве 4 в десятичной системе не 4? А в двоичной это разве не 100? Откуда тут 4 байта? Я понимаю, что там должно быть 4 байта, но не получается осознать, что 1 hex-единица у нас вдруг байт. Или это не так? В общем, на таком банальном я запутался Спасайте...
1
|
30.05.2012, 11:31 | |
Ответы с готовыми решениями:
103
Изменение адреса указателя Вывод адреса указателя Динамическое указание адреса указателя Как сохранить значение адреса указателя в обычную переменную? |
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
|
|
31.05.2012, 17:59 [ТС] | 81 |
У меня сейчас взорвется мозг))
alkagolik, с утверждением Я пожалуй соглашусь. Адрес может быть только переменной, которая может содержать какое-либо значение, согласны?
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
31.05.2012, 18:02 | 82 |
А x - это именно x при любом равенстве хоть зету, хоть игреку.
Добавлено через 2 минуты Ссылка - синоним, а не понял ты. Ссылка во многих случаях ведёт себя, как разыменованный константный указатель. Пока не доберёшься до её адреса и внутренне реализации, где и начнутся сюрпризы. Указатели же хранятся и имеют собственные адреса.
0
|
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
|
||||||
31.05.2012, 18:03 [ТС] | 83 | |||||
Да как это понять?... По всей памяти будет разыскиваться переменная со значением 5? Окей, найдем их две, что будем делать? Адрес которой из них будем брать? Адрес переменной y, т.к. он будет меньше адреса переменной x (возвращаясь к теме с тарелками ) ?
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||||||
31.05.2012, 18:05 | 84 | |||||
Значение с размером попутал.
0
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
31.05.2012, 18:06 | 85 |
Вот что меня недавно позабавило, так это то, что этот код тоже рабочий. Можешь проверить.) Я был удивлён.
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
31.05.2012, 18:06 | 86 |
1
|
Заблокирован
|
|
31.05.2012, 18:08 | 87 |
taras atavin, при чем тут значения. Разыменованный указатель это не значение, это память, на которую он ссылается. http://liveworkspace.org/code/... 5d3bd60438
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
31.05.2012, 18:10 | 89 |
И всё равно &(*p) не правильно, так как если *p - память, то &(*p) - её адрес, то есть значение указателя, а мне нужен его адрес, то есть адрес, по которому записан адрес. А это просто &p.
0
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
31.05.2012, 18:12 | 90 |
Блин, вы и меня запутали уже.)))
Я имел в виду код int & r = 5; Приношу искрение извинения за проявленное нубство.)
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
31.05.2012, 18:19 | 92 |
Корректен. И именно потому, что я хотел показать наличие у указателя собственного адреса.
Добавлено через 3 минуты Вот мой пример без исправлений.
0
|
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
|
|
31.05.2012, 18:22 [ТС] | 93 |
taras atavin,
Ваш пример мне абсолютно понятен. Каждая строчка. Непонятно в чем сыр-бор сейчас?
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||||||
31.05.2012, 18:23 | 94 | |||||
Проверка 1, проверка 2. Эти проверки как раз показали, что не корректно
Добавлено через 1 минуту Тебе, но не ему.
0
|
Заблокирован
|
||||||
31.05.2012, 18:37 | 95 | |||||
просто так
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
31.05.2012, 18:38 | 96 |
alkagolik, вот именно.
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
31.05.2012, 18:42 | 97 |
Ссылки, как я понял, не занимают никакой памяти, так как с ними идет обращение как и с переменными, на которые они ссылаются. То есть в простейшем случае компилятор всегда подставляет под имя ссылки адрес переменной, на которую она ссылается. То есть ссылки не существуют как отдельные объекты.
0
|
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
|
|
31.05.2012, 18:45 [ТС] | 98 |
Toshkarik,
Согласен. alkagolik, я можно на словах сказать, что Вы пытаетесь донести? Я просто код такой хреново воспринимаю пока...
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||||||
31.05.2012, 18:56 | 99 | |||||
Что указатели поминаются только через * и перебор с адресной арифметикой будет
0
|
Заблокирован
|
|
31.05.2012, 19:04 | 100 |
taras atavin, сам -то понял что написал?
0
|
31.05.2012, 19:04 | |
31.05.2012, 19:04 | |
Помогаю со студенческими работами здесь
100
Передача указателя в функцию, присвоение адреса переменной и возврат Получение адреса объекта после обнуления указателя на этот объект выделение памяти при увеличении адреса указателя на размерность int Отличие ссылки от указателя Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |