Почему я получаю другое значение во время выполнения при приведении типа в DWORD? - PullRequest
5 голосов
/ 20 сентября 2011
std::cout << (DWORD)"test";

Если я скомпилирую и запущу это, я получаю разные выходные значения каждый раз, но не могу понять, почему.

Есть идеи?

PS: я используюWindows 7 64-битная, и я компилирую с Microsoft Visual C ++ 2010 Ultimate.

Ответы [ 2 ]

4 голосов
/ 20 сентября 2011

«test» в вашем коде фактически является указателем на начало строки.Когда вы приводите его к DWORD, вы приводите указатель к целочисленному типу и записываете это число.

Поскольку область памяти, в которой хранится «тест», может меняться при каждом запуске, значение, которое высм изменится.

2 голосов
/ 20 сентября 2011
std::cout << (DWORD)"test";

эквивалентно этому:

const char *tmp = "test";
std::cout << (DWORD)tmp; 

То есть, он печатает адрес после приведения его в DWORD:

Это напечатало бы то же значение , если вы сделаете это также:

std::cout << (const void*)"test";
...