2016-07-20 7 views
1
char testChar = 'a'; 
char myCharString[] = "asd"; 
char *pointerToFirstChar = &(myCharString[0]); 
char *pointerToSecondChar = &(myCharString[1]); 
cout << "A char takes " << sizeof(testChar) << " byte(s)"; 
cout << "Value was " << pointerToFirstChar << ", address: " << &pointerToFirstChar << endl; 
cout << "Value 2 was " << pointerToSecondChar << ", address:" << &pointerToSecondChar << endl; 

dieser Ausgänge zu nehmen:Warum ein Zeichen scheint mehr Platz in einem Array als von selbst

"Ein Zeichen nimmt 1 Byte"

“... Adresse: 00F3F718"

"... Adresse: 00F3F70C",

ich denke, der Unterschied zwischen den Adressen sollten 1 Byte sein, da das wäre die Größe der Daten, die sie voneinander trennen. Warum ist es nicht so?

+7

Sie nehmen die Adresse des Zeigers folgen. – user2357112

Antwort

5

&pointerToFirstChar und &pointerToSecondChar, Sie nehmen nicht die Adresse der Elemente des char Array, aber die Adresse der lokalen Variablen pointerToFirstChar und pointerToSecondChar. Beachten Sie, dass sie selbst Zeiger waren.

Vielleicht möchten:

cout << "Value was " << pointerToFirstChar << ", address: " << static_cast<void*>(pointerToFirstChar) << endl; 
cout << "Value 2 was " << pointerToSecondChar << ", address:" << static_cast<void*>(pointerToSecondChar) << endl; 

Hinweis müssen Sie sie void* werfen die Adresse anstelle der Zeichenfolge zu drucken.

+1

@ downvoter: Bitte sagen Sie mir, wo ich falsch liege, damit ich es verbessern kann. – songyuanyao

+1

Ich denke, das ist klar, danke! – Jeppe

0

Sie suchen die Adressen der ZeigerpointerToFirstChar und pointerToSecondChar. Sie sind Zeiger auf Char; Vergleichen Sie ihre Werte und diese werden sich um 1 unterscheiden. Sie scheinen das in Ihrem Text bearbeitet zu haben.

0

Sie drucken die Adresse der Zeigervariablen und nicht die aktuelle Adresse des Zeigers.

zum Beispiel:

&myCharString[0] = 0xFE20 
&myCharString[1] = 0xFE21 
&myCharString[2] = 0xFE23 
char *pointerToFirstChar = &(myCharString[0]); 

Adresse pointerToFirstChar = 0xF8C2 und es hält die Adresse & myCharString [0] = 0xFE20

so drucken Sie, 0xF8C2 statt Drucken 0xFE20

Aktualisieren Sie Ihren Code als f ollows, um das richtige Ergebnis zu erhalten.

cout << "Value was " << pointerToFirstChar << ", address: " << (void *)&pointerToFirstChar[0] << endl; cout << "Value 2 was " << pointerToSecondChar << ", address:" << (void *)&pointerToSecondChar[0] << endl;

Für weitere Informationen wenden Sie sich bitte den folgenden Link print address of array of char

Verwandte Themen