Форум программистов, компьютерный форум CyberForum.ru

Адреса двух разных переменных одинаковы - C++

Восстановить пароль Регистрация
 
Gnetov
0 / 0 / 0
Регистрация: 07.07.2014
Сообщений: 18
21.11.2014, 13:10     Адреса двух разных переменных одинаковы #1
Добрый день! Пытаюсь вывести в Memo1 адреса переменных:
C++
1
2
3
4
int a=5555;
int b=6156;
Memo1->Lines->Add(IntToStr(&a));
Memo1->Lines->Add(IntToStr(&b));
Получаю в итоге: для "a" адрес равен 1, для "b" адрес равен 1.
Разве они не должны быть разные? Переменные же разные. Спасибо заранее всем кто откликнется
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4315 / 3736 / 1260
Регистрация: 14.04.2014
Сообщений: 14,642
21.11.2014, 13:37     Адреса двух разных переменных одинаковы #2
C++
1
Format("%p", &a)
или через sprintf().
Gnetov
0 / 0 / 0
Регистрация: 07.07.2014
Сообщений: 18
21.11.2014, 14:39  [ТС]     Адреса двух разных переменных одинаковы #3
все таки почему значения адресов одинаковые?
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
21.11.2014, 14:43     Адреса двух разных переменных одинаковы #4
Попробуйте:
C++
1
Memo1->Lines->Add(IntToStr(reinterpret_cast<int>(&a)));
Возможно существут перегруженная функция для int*.
Gnetov
0 / 0 / 0
Регистрация: 07.07.2014
Сообщений: 18
21.11.2014, 14:47  [ТС]     Адреса двух разных переменных одинаковы #5
Ага спасибо, вижу, адреса отличаются на "4". А что это за интерпретация адресов такая? Нельзя выводить адрес без reinterpret_cast<int>()?
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
21.11.2014, 14:52     Адреса двух разных переменных одинаковы #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Gnetov Посмотреть сообщение
Ага спасибо, вижу, адреса отличаются на "4". А что это за интерпретация адресов такая? Нельзя выводить адрес без reinterpret_cast<int>()?
Я же сказал скорее всего имеется перегруженная функция IntToStr для int*, которая вместо обработки адреса работает с блоком памяти на который указывает указатель. А операция reinterpret_cast принудительно заставляет рассматривать указатель как число типа int вне зависимости какой тип переменной записан по данному адресу.
nmcf
4315 / 3736 / 1260
Регистрация: 14.04.2014
Сообщений: 14,642
21.11.2014, 15:56     Адреса двух разных переменных одинаковы #7
Так всё равно не верно. Пользуйся форматированием указателя. IntToStr() может давать отрицательные значения.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
21.11.2014, 17:02     Адреса двух разных переменных одинаковы #8
Цитата Сообщение от nmcf Посмотреть сообщение
Так всё равно не верно. Пользуйся форматированием указателя. IntToStr() может давать отрицательные значения.
Диапазон указателей от 0x80000000 до 0xffffffff зарезервирован для ОС. Так что проблем не будет.
DrOffset
6460 / 3834 / 885
Регистрация: 30.01.2014
Сообщений: 6,629
21.11.2014, 17:35     Адреса двух разных переменных одинаковы #9
Цитата Сообщение от Ilot Посмотреть сообщение
имеется перегруженная функция IntToStr для int*
Скорее всего для bool.
____
Учитывая, что ТС вначале указал, что оба вызова дают 1, и, учитывая, что было бы странно делать функцию IntToStr с аргументом-указателем. В отличие от преобразования int*->int, преобразование int*->bool является стандартным неявным преобразованием, поэтому перегрузка разрешается однозначно в пользу версии с аргументом типа bool.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
21.11.2014, 17:42     Адреса двух разных переменных одинаковы #10
Пользуйся такой функцией:
C++
1
2
3
4
5
6
7
8
9
10
11
12
std::string PointerToString(void *x)
{
 unit8_t *p;
 std::string s;
 char Digits[16]={'0', '1',  '2', '3',  '4', '5',  '6', '7',  '8', '9',  'A', 'B',  'C',  'D',  'E', 'F'};
 for (p=x, s=""; p<=x+sizeof(x)-1; ++p)
 {
  s=s+Digits[(*p)/16];
  s=s+Digits[(*p)%16];
 }
 return s;
}
.
nmcf
4315 / 3736 / 1260
Регистрация: 14.04.2014
Сообщений: 14,642
22.11.2014, 16:28     Адреса двух разных переменных одинаковы #11
Цитата Сообщение от Ilot Посмотреть сообщение
Диапазон указателей от 0x80000000 до 0xffffffff
Откуда такие сведения? Это про Windows?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2014, 17:57     Адреса двух разных переменных одинаковы
Еще ссылки по теме:

C++ Сравнение переменных разных типов
Вывести результат двух операций с использованием двух переменных C++
Как вывести адреса переменных? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
22.11.2014, 17:57     Адреса двух разных переменных одинаковы #12
Старший бит адреса в системе windows различает собственно прикладное адресное пространство и отображение на него системного адресного пространства. Если установлен, значит система. Написано в любой книге, где разобрана виртуальная адресация windows. У Чарлза Петзолдта, например, в программирование для windows 95.
Yandex
Объявления
22.11.2014, 17:57     Адреса двух разных переменных одинаковы
Ответ Создать тему
Опции темы

Текущее время: 01:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru