1177 / 838 / 409
Регистрация: 21.10.2012
Сообщений: 2,425
1

Сохранение адреса переменной пользовательского класса в переменную типа int или double

15.10.2018, 15:42. Показов 2251. Ответов 11
Метки нет (Все метки)

Здравствуйте. Подскажите, возможно ли это:
есть переменная пользовательского класса. Я хочу сохранить её адрес (ведь это же просто число вне зависимости от типа переменной) в другую переменную типа int. Но вот так не работает, может быть, скажете, ка исправить?
C++
1
2
secondClass ww(myParam);
int qq = &ww;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.10.2018, 15:42
Ответы с готовыми решениями:

Вызов переменной типа int и типа double из нескольких форм
У меня такой случай: мне нужно из вызвать переменные типа double (double RDW = 0.0; RDW =...

Передача переменной типа double из c# в переменную типа float в SQL
Здравствуйте, имеется проблема с передачей данных из кода c# в бд SQL Имеется переменная типа...

Записать адрес переменной произвольного типа в переменную типа int
Здравствуйте, есть структура __packed struct myStruct{ uint32 HisCh; uint32 sNo; uint16...

Как сравнить переменную типа String с переменной типа Int?
Как сравнить переменную типа String с переменной типа Int в конструкции "if"???

11
Продавец времени
7129 / 4005 / 924
Регистрация: 12.03.2015
Сообщений: 18,834
15.10.2018, 15:46 2
C++
1
2
int qq = (int)<любая_хрень_размером_до_4_байт>;
int qq = (int)ww;
0
1177 / 838 / 409
Регистрация: 21.10.2012
Сообщений: 2,425
15.10.2018, 16:04  [ТС] 3
Verevkin, пишу так:
C++
1
2
secondClass ww(&GT);
int qq = (int)ww;
Ошибка: invalid cast from type 'secondClass' to type 'int'
int qq = (int)ww;
^
0
Продавец времени
7129 / 4005 / 924
Регистрация: 12.03.2015
Сообщений: 18,834
15.10.2018, 16:06 4
Цитата Сообщение от АлександрКом Посмотреть сообщение
Ошибка: invalid cast from type 'secondClass' to type 'int'
покажи typedef secondClass
Наверна, нада так:
C++
1
2
secondClass* ww(&GT);
int qq = (int)ww;
0
1177 / 838 / 409
Регистрация: 21.10.2012
Сообщений: 2,425
15.10.2018, 16:19  [ТС] 5
Verevkin, получилось вот так:
C++
1
2
secondClass ww(&GT);
int qq = (int)&ww;
А есть ли теперь возможность через qq обратиться к полю, хранящемуся в ww? Т.е., какая-нибудь аналогия вызову ww.globalTime только через qq?
0
Продавец времени
7129 / 4005 / 924
Регистрация: 12.03.2015
Сообщений: 18,834
15.10.2018, 16:24 6
Цитата Сообщение от АлександрКом Посмотреть сообщение
А есть ли теперь возможность через qq обратиться к полю, хранящемуся в ww? Т.е., какая-нибудь аналогия вызову ww.globalTime только через qq?
Обратное преобразование типа делай, ёмаё.
Наверное, как то так:
C++
1
(*ww)qq.globalTime = ...
Я ж не телепат. Экспериментируй.
0
1365 / 510 / 70
Регистрация: 21.07.2015
Сообщений: 1,289
15.10.2018, 16:37 7
Цитата Сообщение от АлександрКом Посмотреть сообщение
Сохранение адреса переменной пользовательского класса в переменную типа int или double
В общем случае int и double для этого не подходят.
Цитата Сообщение от Verevkin Посмотреть сообщение
int qq = (int)<любая_хрень_размером_до_4_байт>;
Да вот не любая... И кто вообще гарантировал, что sizeof(int)==4?
Цитата Сообщение от АлександрКом Посмотреть сообщение
Т.е., какая-нибудь аналогия вызову ww.globalTime только через qq?
reinterpret_cast<secondClass*>(qq)->...
0
Продавец времени
7129 / 4005 / 924
Регистрация: 12.03.2015
Сообщений: 18,834
15.10.2018, 16:42 8
Цитата Сообщение от shmkv Посмотреть сообщение
И кто вообще гарантировал, что sizeof(int)==4?
Я не гарантировал.
Я ваще в С++ не копенгаген, я просто мимокрокодил...
0
1177 / 838 / 409
Регистрация: 21.10.2012
Сообщений: 2,425
15.10.2018, 16:50  [ТС] 9
Verevkin, спасибо, получилось вот так
C++
1
((secondClass*) qq)->globalTime
Только не понятен один момент: я думал, что строкой int qq = (int)&ww; мы помещаем адрес объекта ww в переменную qq. Т.е., чтобы потом добраться к значению, которое лежит по этому адресу, мы должны были написать *qq ну и преобразовать к типу secondClass и в итоге получить запись что-то вроде этой:
C++
1
secondClass newPerem = (secondClass) *qq;
Но так не работает
0
Продавец времени
7129 / 4005 / 924
Регистрация: 12.03.2015
Сообщений: 18,834
15.10.2018, 16:52 10
Цитата Сообщение от АлександрКом Посмотреть сообщение
Но так не работает
Все претензии к автору.

0
3660 / 2997 / 828
Регистрация: 25.03.2012
Сообщений: 11,044
Записей в блоге: 1
15.10.2018, 16:55 11
Цитата Сообщение от АлександрКом Посмотреть сообщение
secondClass newPerem = (secondClass) *qq;
Но так не работает
сначала преобразуем адрес, в тип нужного указателя,
чтобы оператор разыменования * заранее знал какие данные с этого адреса вытаскивать
потом разыменовываем.


C++
1
secondClass newPerem = *(  (secondClass*)qq  );
1
1177 / 838 / 409
Регистрация: 21.10.2012
Сообщений: 2,425
15.10.2018, 17:09  [ТС] 12
Kuzia domovenok, спасибо, всё понял
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.10.2018, 17:09
Помогаю со студенческими работами здесь

Как из числа типа double сделать int (сохранение целой и дробной части в отдельных целочисленных переменных)
Например есть число double d = 123.4567 Как сделать что бы int i1 = 123; int i2 =4567;

Как передать в коллекцию объект класса или пользовательского типа?
Встречаю две взаимоисключающие ошибки: В модуле класса PublicNonCreatable &quot;Supplies&quot; ...

Написать функцию min с переменным числом параметров, которая находит минимальное из чисел типа int или из чисел типа double
Написать функцию min с переменным числом параметров, которая находит минимальное из чисел типа int...

Как создать переменную типа int исспользуя в качестве имени значение строковой переменной.
есть переменная типа string в которой допустим хранится значение: &quot;file001&quot; как объявить\создать...


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

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

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