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

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

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

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

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

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
5119 / 4439 / 1477
Регистрация: 14.04.2014
Сообщений: 17,613
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
Модератор
Эксперт С++
1789 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 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
Модератор
Эксперт С++
1789 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
21.11.2014, 14:52     Адреса двух разных переменных одинаковы #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Gnetov Посмотреть сообщение
Ага спасибо, вижу, адреса отличаются на "4". А что это за интерпретация адресов такая? Нельзя выводить адрес без reinterpret_cast<int>()?
Я же сказал скорее всего имеется перегруженная функция IntToStr для int*, которая вместо обработки адреса работает с блоком памяти на который указывает указатель. А операция reinterpret_cast принудительно заставляет рассматривать указатель как число типа int вне зависимости какой тип переменной записан по данному адресу.
nmcf
5119 / 4439 / 1477
Регистрация: 14.04.2014
Сообщений: 17,613
21.11.2014, 15:56     Адреса двух разных переменных одинаковы #7
Так всё равно не верно. Пользуйся форматированием указателя. IntToStr() может давать отрицательные значения.
Ilot
Модератор
Эксперт С++
1789 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
21.11.2014, 17:02     Адреса двух разных переменных одинаковы #8
Цитата Сообщение от nmcf Посмотреть сообщение
Так всё равно не верно. Пользуйся форматированием указателя. IntToStr() может давать отрицательные значения.
Диапазон указателей от 0x80000000 до 0xffffffff зарезервирован для ОС. Так что проблем не будет.
DrOffset
6914 / 4107 / 936
Регистрация: 30.01.2014
Сообщений: 6,906
21.11.2014, 17:35     Адреса двух разных переменных одинаковы #9
Цитата Сообщение от Ilot Посмотреть сообщение
имеется перегруженная функция IntToStr для int*
Скорее всего для bool.
____
Учитывая, что ТС вначале указал, что оба вызова дают 1, и, учитывая, что было бы странно делать функцию IntToStr с аргументом-указателем. В отличие от преобразования int*->int, преобразование int*->bool является стандартным неявным преобразованием, поэтому перегрузка разрешается однозначно в пользу версии с аргументом типа bool.
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
5119 / 4439 / 1477
Регистрация: 14.04.2014
Сообщений: 17,613
22.11.2014, 16:28     Адреса двух разных переменных одинаковы #11
Цитата Сообщение от Ilot Посмотреть сообщение
Диапазон указателей от 0x80000000 до 0xffffffff
Откуда такие сведения? Это про Windows?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2014, 17:57     Адреса двух разных переменных одинаковы
Еще ссылки по теме:

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

Конкатенация двух переменных - C++
Доброго времени суток! Прошу прощения за такой вопрос но нет времени искать решение в интернете и я только два дня как начал учить с++! Мне...

Вывод значения двух переменных - C++
есть к примеру : шаблон функции (параметры) { что то делаеться и return двух переменных} вызов : cout&lt;&lt;шаблон...

Обмен значениями двух переменных - C++
Нашёл на другом форуме занятную формулу обмена значений двух переменных(очевидно на с++): b = – –a + (a=b)*0; Проверил на числах 1 и...


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

Или воспользуйтесь поиском по форуму:
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     Адреса двух разных переменных одинаковы
Ответ Создать тему
Опции темы

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