Frage zu Zeiger



  • Hi,

    ich habe folgenden Quelltext gegeben:

    string name [5]
    name[0] = "Hans";
    ...
    name[4] = "Max";
    

    Nun rufe ich eine Funktion Sortieren auf:

    sortieren(name);
    
    void sortieren(string *array) {...}
    

    Meine Frage dazu:
    Warum rufe ich denn hier die Funktion sortieren nicht mit dem Dereferenzierungsoperator * auf?

    ODer ist die Frage von vornherein doof, weil string *array ein Zeiger ist und somit keine dereferenzierten Objekte gespeichert werden können, sondern nur die Adressen der Objekte??

    Danke!

    Gruß



  • Arrays können nicht kopiert werden, aber schon aus C bekannt existiert der Array-to-Pointer Decay (oder so ähnlich) - der Name eines Arrays kann implizit konvertiert werden zu einem Pointer auf den Array-Anfang.
    (das und die Tatsache, daß Pointer auch einen Index-Zugriff erlauben, führen mitunter zu der Legende, daß Pointer und Arrays das selbe sind)

    Übrigens solltest du deiner sortieren()-Funktion auch die Größe des Arrays mitgeben - sie hat nämlich keine Möglichkeit, sie selber zu ermitteln. Oder noch besser, du verwendest std::vector<>/std::tr1::array<> und std::sort().


Anmelden zum Antworten