2016-10-01 25 views
0

このコードはコンパイルが、私が期待する結果を生成しません:char&のアドレスを取得するにはどうしたらいいですか?

私は charchar&のアドレスがエイリアシングされて取得するにはどうすればよい
h 
0x22fe38 

:結果のようなものである

#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; 
} 

を?

+0

これは問題ではありませんが、余分なものが必要な場合を除き、 'std :: endl'を使用しないでください。 '' \ n ''は行を終わらせます。 –

答えて

2

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年代は、これに似機能を持っているので、あなたは元の文字を印刷している:あなたはのアドレスを求めるとき

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

を文字、あなたはchar*を取得します。他の型の場合と同様に、&という演算子のアドレスは型へのポインタを返します。 char*char const*に変換されるので、あたかもnull終端文字列であるかのように、前述の関数が呼び出されます。

関連する問題