2016-10-01 4 views
0

Этот код компилируется, но не генерирует результаты, которые я бы ожидать:Как я могу получить адрес char &?

#include <iostream> 

int main() 
{ 
    char h = 'h'; 
    char& href = h; 

    std::cout << &href << std::endl; 

    int x = 1; 
    int& xref = x; 

    std::cout << &xref << std::endl; 
} 

В результате получается нечто вроде:

h 
0x22fe38 

Как получить адрес char мой char& является альясинга ?

+0

Это не проблема, но не используйте 'std :: endl', если вам не нужен дополнительный материал, который он делает. '' \ n'' заканчивает линию. –

ответ

2

Как получить адрес char my char & является псевдонимом?

Выражение &href.

Проблема, которую вы видите, связана с тем, что тип &href - это char*. Следовательно,

std::cout << &href << std::endl 

пытается напечатать нулевую завершенную строку. Вы можете использовать

std::cout << (void*)&href << std::endl 

, чтобы распечатать адрес.

3

Просто бросайте его void*:

std::cout << (void*)&href << std::endl; 

Вы печатаете оригинальный характер, потому что std::ostream «s есть функция, которая выглядит примерно так:

std::ostream& operator<<(std::ostream& os, char const* val); 

Когда вы запрашиваете адрес персонаж, вы получаете char*; как и для любого другого типа, адрес & оператор возвращает указатель на тип. Поскольку char* преобразуется в char const*, вызывается вышеупомянутая функция, как если бы это была строка с нулевым завершением.

Смежные вопросы