С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
#1

Указатель this - C++

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

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

Как получить ссылку на указатель или указатель на указатель в массиве? - C++
В процессе реализации сортировки пузырьком натолкнулся на такую проблему: как поменять значения указателей, передаваемых в функцию. Если...

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

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

Как правильно удалять выделенную память под указатель на указатель? - C++
есть код #include <iostream> #include <conio.h> #include <stdlib.h> #include <time.h> using namespace std; void sort_1(const...

Реализация двоичных деревьев поиска: Зачем в параметрах функции используется указатель на указатель - C++
Всем привет, встретил в книге такой пример добавления узла в дерево: typedef struct tree { int data; tree *left, *right,...

Передача умного указателя в функцию принимающую указатель на указатель - C++
Итак имеется функция со следующим параметром: HRESULT __stdcall Function(SomeClass **param); В случае, когда создаём обычный...

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

CString str;
str.Format("%x",this);
MessageBox(str......
0
cossack5
54 / 48 / 1
Регистрация: 02.08.2012
Сообщений: 127
13.08.2012, 18:49 #3
Зачем вам преобразование this? Это же указатель на объект. Но если у вас есть веские причины, то можно написать (char*)this:
C++
1
char* string=(char*)this;
0
ValeryS
Модератор
6729 / 5138 / 485
Регистрация: 14.02.2011
Сообщений: 17,247
13.08.2012, 18:49 #4
Цитата Сообщение от bgm313 Посмотреть сообщение
Какой максимальный объём памяти может занимать адрес объекта?
для 32 битных ос 4 Байта
64 ---- 8 Байт
1
bgm313
12 / 12 / 2
Регистрация: 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 / 1
Регистрация: 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
1484 / 1130 / 45
Регистрация: 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
Модератор
6729 / 5138 / 485
Регистрация: 14.02.2011
Сообщений: 17,247
13.08.2012, 19:32 #8
Цитата Сообщение от bgm313 Посмотреть сообщение
от конструктора объекта по адресу this.
не поверишь в Винде this- это и есть адрес объекта
0
Invader_Zim
Twilight Parasite
153 / 149 / 2
Регистрация: 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
18379 / 6427 / 441
Регистрация: 30.03.2009
Сообщений: 17,841
Записей в блоге: 28
15.08.2012, 09:27 #11
Цитата Сообщение от ValeryS Посмотреть сообщение
не поверишь в Винде this- это и есть адрес объекта
ТС - новичок, а потому не смог грамотно вопрос сформулировать. Ему не надо this преобразовывать в строку, ему нужно распечатать this (как адресную величину) в окошко
0
ValeryS
Модератор
6729 / 5138 / 485
Регистрация: 14.02.2011
Сообщений: 17,247
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
18379 / 6427 / 441
Регистрация: 30.03.2009
Сообщений: 17,841
Записей в блоге: 28
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
Привет! Вот еще темы с ответами:

Объяснить работу функции, возвращающей указатель на указатель на char - C++
Добрый день! Сможете объяснить что означает запись char **InputFile(int &amp;strings);? Почему именно двойное **? Буду очень благодарна...

Указатель на указатель, функции для создания новых массивов? - C++
Всем привет! У меня в коде есть несколько новых массивов, чтобы не повторяться я создам функцию которая будет выделять память под новые...

Функция принимает указатель на void и возвращает указатель на int - C++
Запишите прототип функции, которая принимает указатель на void и возвращает указатель на int.

Приведение любого двумерного массива к типу указатель на указатель - C++
Допустим, есть несколько массивов int arr1; int arr2; int arr3; Какое преобразование нужно сделать, чтобы подобные присвоения...


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

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

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