2016-10-01 3 views
0

Dieser Code kompiliert, sondern erzeugen nicht die Ergebnisse, die ich erwarten würde:Wie kann ich die Adresse eines Char & bekommen?

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

Das Ergebnis ist so etwas wie:

h 
0x22fe38 

Wie rufe ich die Adresse des char meine char& Aliasing ?

+0

Dies ist nicht das Problem, aber verwenden Sie nicht 'std :: endl', es sei denn, Sie benötigen die zusätzlichen Sachen, die es tut. '\ n'' beendet eine Zeile. –

Antwort

2

Wie bekomme ich die Adresse des Char Char Char & Aliasing?

Der Ausdruck ist &href.

Das Problem, das Sie sehen, liegt an der Tatsache, dass der Typ &hrefchar* ist. Daher

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

versucht, eine nullterminierte Zeichenfolge zu drucken. Sie können die Adresse mit

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

ausdrucken.

3

warf es einfach zu void*:

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

Sie drucken den ursprünglichen Charakter, weil std::ostream ‚s eine Funktion haben, die dieser recht ähnlich sieht:

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

Wenn Sie für die Adresse bitten ein Zeichen, erhalten Sie eine char*; Wie bei jedem anderen Typ gibt die Adresse des &-Operators einen Zeiger auf den Typ zurück. Da char* in char const* konvertiert wird, wird die zuvor erwähnte Funktion aufgerufen, als ob es eine nullterminierte Zeichenfolge wäre.

Verwandte Themen