Что лучший портативный путь состоит в том, чтобы представить указатель как строку в C++?

Следующее даст вам координаты мыши относительно вашего контроля. Например, это приводит к (0,0), если мышь находится над левым верхним углом элемента управления:

var coordinates = yourControl.PointToClient(Cursor.Position);
5
задан Milan Babuškov 4 June 2009 в 06:21
поделиться

6 ответов

Для указателей всегда используйте % p --- это формат спецификатор, специально разработанный для печати указателей в нужном формате. : -)

20
ответ дан 18 December 2019 в 05:21
поделиться

Я бы сделал это:

std::cout << p;

Если вы настроены на cstdio:

printf("%p", p);
9
ответ дан 18 December 2019 в 05:21
поделиться

printf имеет модуль форматирования% p, который я полагаю, стандартизировано:

printf( "%p", p );

, но поскольку вы используете C ++, ostreams уже перегружает вывод указателя:

#include <iostream>
using namespace std;;

class A {};

int main() {
    A a;
    cout << &a << endl;
}

производит:

0x22ff6f
7
ответ дан 18 December 2019 в 05:21
поделиться

Вы ищете строку форматирования % p ?

printf("%p", p);

Это даст шестнадцатеричный адрес, на который указывает указатель (и, я думаю, форматы NULL и для вас).

3
ответ дан 18 December 2019 в 05:21
поделиться

Я бы сделал:

cout << p << endl;

Строки (одной кодировки) переносимы. Если вы хотите сравнить их как указатели, вам нужно сначала разобрать строку обратно на unsigned long .

Что касается 128-битных систем, до них еще далеко. Используя 64 бита, вы можете напрямую адресовать 16,8 миллионов терабайт ОЗУ.

0
ответ дан 18 December 2019 в 05:21
поделиться

Это также можно сделать как

printf ("% # x", p);

Это обеспечит одинаковый формат (0x ...) на разных платформах.

0
ответ дан 18 December 2019 в 05:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: