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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Gnetov
0 / 0 / 0
Регистрация: 07.07.2014
Сообщений: 18
#1

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

21.11.2014, 13:10. Просмотров 273. Ответов 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2014, 13:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Адреса двух разных переменных одинаковы (C++):

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

Адреса переменных - C++
У меня возник вопрос, можно ли записать в бинарный файл адрес переменной? Если да, то как? И можно ли будет другой программой считать этот...

Адреса переменных в моем ноуте - C++
Вот интересно! По идее адреса должы различаться, у меня же они трижды вышли одинаковые. Нормально ли это? Или проще вобще с этим не...

Как вывести адреса переменных? - C++
Помогите доработать программу, так чтобы выводились адреса значений #include <iostream.h> #include <conio.h> void main(void) { ...

Вывести результат двух операций с использованием двух переменных - C++
Такие дела: надо ввести с клавиатуры 4 переменные, используя только 2 int, и посчитать результат двух выражений Есть такой вариант, но...

Почему в scanf нужно указывать именно адреса переменных? - C++
Почему в функции scanf нужно указывать именно адреса переменных? Почему не работает, когда указываем переменную? Что хранит в себе...

11
nmcf
5362 / 4678 / 1568
Регистрация: 14.04.2014
Сообщений: 18,714
21.11.2014, 13:37 #2
C++
1
Format("%p", &a)
или через sprintf().
0
Gnetov
0 / 0 / 0
Регистрация: 07.07.2014
Сообщений: 18
21.11.2014, 14:39  [ТС] #3
все таки почему значения адресов одинаковые?
0
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
21.11.2014, 14:43 #4
Попробуйте:
C++
1
Memo1->Lines->Add(IntToStr(reinterpret_cast<int>(&a)));
Возможно существут перегруженная функция для int*.
1
Gnetov
0 / 0 / 0
Регистрация: 07.07.2014
Сообщений: 18
21.11.2014, 14:47  [ТС] #5
Ага спасибо, вижу, адреса отличаются на "4". А что это за интерпретация адресов такая? Нельзя выводить адрес без reinterpret_cast<int>()?
0
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
21.11.2014, 14:52 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Gnetov Посмотреть сообщение
Ага спасибо, вижу, адреса отличаются на "4". А что это за интерпретация адресов такая? Нельзя выводить адрес без reinterpret_cast<int>()?
Я же сказал скорее всего имеется перегруженная функция IntToStr для int*, которая вместо обработки адреса работает с блоком памяти на который указывает указатель. А операция reinterpret_cast принудительно заставляет рассматривать указатель как число типа int вне зависимости какой тип переменной записан по данному адресу.
1
nmcf
5362 / 4678 / 1568
Регистрация: 14.04.2014
Сообщений: 18,714
21.11.2014, 15:56 #7
Так всё равно не верно. Пользуйся форматированием указателя. IntToStr() может давать отрицательные значения.
0
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
21.11.2014, 17:02 #8
Цитата Сообщение от nmcf Посмотреть сообщение
Так всё равно не верно. Пользуйся форматированием указателя. IntToStr() может давать отрицательные значения.
Диапазон указателей от 0x80000000 до 0xffffffff зарезервирован для ОС. Так что проблем не будет.
0
DrOffset
7351 / 4451 / 1009
Регистрация: 30.01.2014
Сообщений: 7,292
21.11.2014, 17:35 #9
Цитата Сообщение от Ilot Посмотреть сообщение
имеется перегруженная функция IntToStr для int*
Скорее всего для bool.
____
Учитывая, что ТС вначале указал, что оба вызова дают 1, и, учитывая, что было бы странно делать функцию IntToStr с аргументом-указателем. В отличие от преобразования int*->int, преобразование int*->bool является стандартным неявным преобразованием, поэтому перегрузка разрешается однозначно в пользу версии с аргументом типа bool.
0
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;
}
.
0
nmcf
5362 / 4678 / 1568
Регистрация: 14.04.2014
Сообщений: 18,714
22.11.2014, 16:28 #11
Цитата Сообщение от Ilot Посмотреть сообщение
Диапазон указателей от 0x80000000 до 0xffffffff
Откуда такие сведения? Это про Windows?
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
22.11.2014, 17:57 #12
Старший бит адреса в системе windows различает собственно прикладное адресное пространство и отображение на него системного адресного пространства. Если установлен, значит система. Написано в любой книге, где разобрана виртуальная адресация windows. У Чарлза Петзолдта, например, в программирование для windows 95.
0
22.11.2014, 17:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2014, 17:57
Привет! Вот еще темы с ответами:

Сравнение переменных разных типов - C++
Здравствуйте. Столкнулся с проблемой не совпадения типов данных. Есть переменная string str, которая, к примеру, имеет значение &quot;1245&quot;....

В чём отличие разных способов объявления переменных? - C++
в чем отличие int a(2); от int a=2; И как писать правильней

могут ли быть одинаковые имена переменных в разных структурах - C++
struct inMaterial { int number; string Date; string NumberDoc; int weight; string typeW; int summ; string typeMoney; ...

Ошибка при использовании нескольких переменных с одним именем в разных уровнях вложенности циклов for - C++
Почему когда создаешь цикл фор по 2 раза и больше раз,и объявляешь там одну и ту же переменную(с одним названием),то не выдаёт ошибку?


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru