Когда я запускаю этот код:печать адреса переменных
uint8_t stackVar = 0;
void* ptr = &stackVar;
uint8_t& ref = reinterpret_cast<uint8_t&>(ptr);
std::cout << (void*)&ref << std::endl;
std::cout << ptr << std::endl;
std::cout << (void*)&stackVar << std::endl;
я получаю этот выход:
0x22fe30
0x22fe3f
0x22fe3f
По крайней мере, в моей оценке, я должен получить тот же номер для всех этих трех утверждений. Что здесь происходит?
Вы делаете предположения о том, как ссылки реализуются –
'& ref' это адрес ссылки на указатель. Почему вы ожидаете, что он будет равен самому указателю? –
Я думаю, что OP путается в том, что '&' имеет два значения. '&' В первом cout означает 'address-of', а не' reference'. – PaulMcKenzie