0 / 0 / 0
Регистрация: 07.07.2014
Сообщений: 18
1

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

21.11.2014, 13:10. Показов 1646. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Пытаюсь вывести в 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.
Разве они не должны быть разные? Переменные же разные. Спасибо заранее всем кто откликнется
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.11.2014, 13:10
Ответы с готовыми решениями:

Функция swap перестановки значений двух переменных для данных разных типов. Используйте template
не могу решить ( честно говоря вообще не понимаю его ) ((((( Напишите функцию swap перестановки...

Вывод значений переменных в двух разных классах
Доброго времени суток.По заданию необходимо создать переменные со спецификаторами public и...

Построить в разных областях экрана графики (поверхности) функций от двух переменных
очень вас прошу помогите!!!! Линейные отображения плоскостей. 1. Заполнить параллелограмм...

Можно ли в С# ввести два разных числа для двух переменных через пробел?
В общем, есть задача, в которой есть данные на входе. Есть код ввода переменных: for (i = 0; i...

11
7533 / 6396 / 2916
Регистрация: 14.04.2014
Сообщений: 27,855
21.11.2014, 13:37 2
C++
1
Format("%p", &a)
или через sprintf().
0
0 / 0 / 0
Регистрация: 07.07.2014
Сообщений: 18
21.11.2014, 14:39  [ТС] 3
все таки почему значения адресов одинаковые?
0
Эксперт по математике/физикеЭксперт С++
2013 / 1342 / 382
Регистрация: 16.05.2013
Сообщений: 3,463
Записей в блоге: 6
21.11.2014, 14:43 4
Попробуйте:
C++
1
Memo1->Lines->Add(IntToStr(reinterpret_cast<int>(&a)));
Возможно существут перегруженная функция для int*.
1
0 / 0 / 0
Регистрация: 07.07.2014
Сообщений: 18
21.11.2014, 14:47  [ТС] 5
Ага спасибо, вижу, адреса отличаются на "4". А что это за интерпретация адресов такая? Нельзя выводить адрес без reinterpret_cast<int>()?
0
Эксперт по математике/физикеЭксперт С++
2013 / 1342 / 382
Регистрация: 16.05.2013
Сообщений: 3,463
Записей в блоге: 6
21.11.2014, 14:52 6
Лучший ответ Сообщение было отмечено Gnetov как решение

Решение

Цитата Сообщение от Gnetov Посмотреть сообщение
Ага спасибо, вижу, адреса отличаются на "4". А что это за интерпретация адресов такая? Нельзя выводить адрес без reinterpret_cast<int>()?
Я же сказал скорее всего имеется перегруженная функция IntToStr для int*, которая вместо обработки адреса работает с блоком памяти на который указывает указатель. А операция reinterpret_cast принудительно заставляет рассматривать указатель как число типа int вне зависимости какой тип переменной записан по данному адресу.
1
7533 / 6396 / 2916
Регистрация: 14.04.2014
Сообщений: 27,855
21.11.2014, 15:56 7
Так всё равно не верно. Пользуйся форматированием указателя. IntToStr() может давать отрицательные значения.
0
Эксперт по математике/физикеЭксперт С++
2013 / 1342 / 382
Регистрация: 16.05.2013
Сообщений: 3,463
Записей в блоге: 6
21.11.2014, 17:02 8
Цитата Сообщение от nmcf Посмотреть сообщение
Так всё равно не верно. Пользуйся форматированием указателя. IntToStr() может давать отрицательные значения.
Диапазон указателей от 0x80000000 до 0xffffffff зарезервирован для ОС. Так что проблем не будет.
0
17415 / 9249 / 2262
Регистрация: 30.01.2014
Сообщений: 16,196
21.11.2014, 17:35 9
Цитата Сообщение от Ilot Посмотреть сообщение
имеется перегруженная функция IntToStr для int*
Скорее всего для bool.
____
Учитывая, что ТС вначале указал, что оба вызова дают 1, и, учитывая, что было бы странно делать функцию IntToStr с аргументом-указателем. В отличие от преобразования int*->int, преобразование int*->bool является стандартным неявным преобразованием, поэтому перегрузка разрешается однозначно в пользу версии с аргументом типа bool.
0
4203 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
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;
}
.
0
7533 / 6396 / 2916
Регистрация: 14.04.2014
Сообщений: 27,855
22.11.2014, 16:28 11
Цитата Сообщение от Ilot Посмотреть сообщение
Диапазон указателей от 0x80000000 до 0xffffffff
Откуда такие сведения? Это про Windows?
0
4203 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
22.11.2014, 17:57 12
Старший бит адреса в системе windows различает собственно прикладное адресное пространство и отображение на него системного адресного пространства. Если установлен, значит система. Написано в любой книге, где разобрана виртуальная адресация windows. У Чарлза Петзолдта, например, в программирование для windows 95.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.11.2014, 17:57
Помогаю со студенческими работами здесь

Создать два одинаковых потока, в которых независимо друг от друга происходит увеличение двух разных переменных
Создать два одинаковых потока, в которых независимо друг от друга происходит увеличение двух разных...

Почему начальные адреса в ОП, на которые загружается программа, одинаковы на всех компьютерах?
Т.е. есть некая программа. Есть адрес в ОП, например 0xE123F456. Скомпилированный исполняемый файл...

Найти количество элементов, которые одинаковы в двух массивах
Даны два массива определенной длины. Проинициализировать массивы и найти количество элементов,...

Если значения двух ячеек одинаковы, то нужно удалить фамилию
если сумма двух ячейка одинаковые то нужно удалить ту фамилию на следующем лист надо формула


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru