Felder und Adressen



  • Hallo zusammen!

    Hab mal eine kurze Frage bezüglich Feldern und Adressen, und zwar ist der Arrayname eines Arrays doch immer zugleich auch die Anfangsadresse des Feldes. Das wollte ich mal in einem Programm testen.

    Hier ist mein Quellcode:

    #include "stdafx.h"
    #include <iostream>
    
    using namespace std;
    
    int main(void)
    { 
    	int a1[10];
    	char a2[10];
    	cout<<a1<<endl;
    	cout<<a2<<endl;
    }
    

    Die Ausgabe:

    0012FEB0
    ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠└ ↕
    Press any key to continue

    oder verhält sich das bei einem Cstring anders?

    Gruß bourne



  • Was erwartest du denn als Ausgabe? 😕



  • Ich erwarte die Adresse des 0.Feldelementes von a2.



  • Verdammt Denkfehler: ein char-Array gibt man ja schon mit cout<<.... aus,
    müsste für die Adresse also lauten:
    cout<<&a2[0];

    Danke!



  • @bourne: nein 😉

    @topic: Normalerweise stimmt es schon dass cout die Adresse eines Zeigers ausgibt. Nur bei einem char-Pointer verhält es sich besonderst. Da gibt cout alle Zeichen bis zum nächsten Nullbyte aus. - Warum ist das so? Ganz einfach weil ein String-Literal (also einfach ein Text in Anführungszeichen) im Grunde einen konstanten Zeiger auf einen char darstellt (const char*). Würde es diese Besonderheit also nicht geben würde man bei ,,cout << "Hallo";`` auch nur eine Adresse sehen, diese des Strings "Hallo" der irgendwo im Speicher liegt.

    Lösung:

    char *p = /* .. */;
    cout << reinterpret_cast<void*>(p); // tu so als ob p auf 'irgendwas' zeigen würde
    

    Gruß


Anmelden zum Antworten