Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
bgm313
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
#1

Указатель this

13.08.2012, 18:45. Просмотров 891. Ответов 12
Метки нет (Все метки)

Всем привет. Как можно преобразовать указатель this в строку, для дальнейшего использования в функции MessageaBoxA()? Просто - напросто. я думаю, что если сделать преобразование типа (int)this и затем вызвать функцию itoa возможна потеря данных или нет?
Какой максимальный объём памяти может занимать адрес объекта?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2012, 18:45
Ответы с готовыми решениями:

Как получить ссылку на указатель или указатель на указатель в массиве?
В процессе реализации сортировки пузырьком натолкнулся на такую проблему: как...

Функция, принимающая указатель и число байт и выделяющая память под указатель
Здравствуйте. Задача легкая, но почему-то завис Нужно написать функцию,...

Функция, получающая указатель на обычную функцию, получает указатель на метод класса
Здравтсвуйте. Имеется вопрос по указателям на методы класса. Допустим, есть...

Как правильно удалять выделенную память под указатель на указатель?
есть код #include <iostream> #include <conio.h> #include <stdlib.h>...

Реализация двоичных деревьев поиска: Зачем в параметрах функции используется указатель на указатель
Всем привет, встретил в книге такой пример добавления узла в дерево: typedef...

12
ValeryS
Модератор
7216 / 5478 / 682
Регистрация: 14.02.2011
Сообщений: 18,530
13.08.2012, 18:48 #2
Цитата Сообщение от bgm313 Посмотреть сообщение
Всем привет. Как можно преобразовать указатель this в строку, для дальнейшего использования в функции MessageaBoxA()?
Имя объекта ты не получишь
а так

CString str;
str.Format("%x",this);
MessageBox(str......
0
cossack5
54 / 48 / 4
Регистрация: 02.08.2012
Сообщений: 127
13.08.2012, 18:49 #3
Зачем вам преобразование this? Это же указатель на объект. Но если у вас есть веские причины, то можно написать (char*)this:
C++
1
char* string=(char*)this;
0
ValeryS
Модератор
7216 / 5478 / 682
Регистрация: 14.02.2011
Сообщений: 18,530
13.08.2012, 18:49 #4
Цитата Сообщение от bgm313 Посмотреть сообщение
Какой максимальный объём памяти может занимать адрес объекта?
для 32 битных ос 4 Байта
64 ---- 8 Байт
1
bgm313
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
13.08.2012, 19:00  [ТС] #5
Цитата Сообщение от cossack5 Посмотреть сообщение
Но если у вас есть веские причины, то можно написать (char*)this:
C++
1
char* string=(char*)this;
Что-то я сильно сомневаюсь в том, что преобразование произойдёт корректно.

Добавлено через 1 минуту
Цитата Сообщение от cossack5 Посмотреть сообщение
Зачем вам преобразование this?
[/CPP]
Чтобы вывести приветственное сообщение типа: привет от конструктора объекта по адресу this.

Добавлено через 23 секунды
В окне Windows
0
cossack5
54 / 48 / 4
Регистрация: 02.08.2012
Сообщений: 127
13.08.2012, 19:07 #6
Цитата Сообщение от bgm313 Посмотреть сообщение
Чтобы вывести приветственное сообщение типа: привет от конструктора объекта по адресу this.
Если вам нужно адрес, то, разумеется, это не подойдет.
C++
1
2
char str[20];
_itoa((int)this,str,16 /*10*/);
0
DU
1486 / 1132 / 164
Регистрация: 05.12.2011
Сообщений: 2,279
13.08.2012, 19:14 #7
созвожно подойдет каст в ptrdiff_t и последующее его преобразование в строку каким нибудь из способов. возмножно так же подойдет использование стринг стрима:

C++
1
2
3
4
5
6
7
8
9
#include <sstream>
 
template <typename T>
std::string PtrToString(const T* ptr)
{
   std::ostringstream oss;
   oss << static_cast<const void*>(ptr);
   return oss.str();
}
Еще вариант - это форматный флаг %p
http://www.cplusplus.com/reference/clibrary/cstdio/printf/
Для МФЦшной CString::Format тоже должен работать.
0
ValeryS
Модератор
7216 / 5478 / 682
Регистрация: 14.02.2011
Сообщений: 18,530
13.08.2012, 19:32 #8
Цитата Сообщение от bgm313 Посмотреть сообщение
от конструктора объекта по адресу this.
не поверишь в Винде this- это и есть адрес объекта
0
Invader_Zim
Twilight Parasite
153 / 149 / 7
Регистрация: 21.07.2011
Сообщений: 908
14.08.2012, 15:50 #9
ValeryS,

Не по теме:

не повериш, в линуксе тоже!

0
ValeryS
15.08.2012, 07:36
  #10

Не по теме:

Цитата Сообщение от Invader_Zim Посмотреть сообщение
не повериш, в линуксе тоже!
поверю

0
Evg
Эксперт CАвтор FAQ
19277 / 7134 / 528
Регистрация: 30.03.2009
Сообщений: 19,976
Записей в блоге: 30
15.08.2012, 09:27 #11
Цитата Сообщение от ValeryS Посмотреть сообщение
не поверишь в Винде this- это и есть адрес объекта
ТС - новичок, а потому не смог грамотно вопрос сформулировать. Ему не надо this преобразовывать в строку, ему нужно распечатать this (как адресную величину) в окошко
0
ValeryS
Модератор
7216 / 5478 / 682
Регистрация: 14.02.2011
Сообщений: 18,530
15.08.2012, 09:45 #12
Цитата Сообщение от Evg Посмотреть сообщение
ТС - новичок, а потому не смог грамотно вопрос сформулировать. Ему не надо this преобразовывать в строку, ему нужно распечатать this (как адресную величину) в окошко
Я и показал для MFC
Цитата Сообщение от ValeryS Посмотреть сообщение
C++
1
2
3
CString str;
 str.Format("%x",this);
 MessageBox(str......
по моему самое простое

Добавлено через 5 минут
Если не использовать MFC то так
C++
1
2
3
 char buff[20];
sprintf(buff, "%x",this);
MessageBox(buff......
0
Evg
Эксперт CАвтор FAQ
19277 / 7134 / 528
Регистрация: 30.03.2009
Сообщений: 19,976
Записей в блоге: 30
15.08.2012, 10:54 #13
Цитата Сообщение от ValeryS Посмотреть сообщение
Я и показал для MFC
Я всего лишь высказался по поводу общей постановки вопроса
0
15.08.2012, 10:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2012, 10:54

Добавление в бинарное дерево: почему используется указатель на указатель?
Здравствуйте, Корень создаёться вот так TREE *root=NULL; непонятно почему...

Объяснить работу функции, возвращающей указатель на указатель на char
Добрый день! Сможете объяснить что означает запись char **InputFile(int...

Передача умного указателя в функцию принимающую указатель на указатель
Итак имеется функция со следующим параметром: HRESULT __stdcall...


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

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

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