Problem mit Zeigern



  • Hallo, ich habe gerade angefangen zu programmieren und habe Verständnisschwierigkeiten bei Zeigern.

    Wenn ich zum Beispiel einen String habe:

    char *txt="Hallo";

    Wie komme ich dann an die einzelnen Elemente von dem String, also an 'H' , 'a' , usw?



  • txt[0], txt[1], ..., oder ganz hardcore *txt, *(txt+1), ...



  • Hallo

    Ja Ja die lieben Zeiger. Das ist alles gar nicht so schwer und wenn du es kannst extrem nuetzlich. Mein Vorgänger hat dir ja schon gesagt das du bei einem Zeiger auf char mit dem indexoperator auf die einzelnen Zeichen zugreifen kanst.

    Ein Zeiger ist wie der Name schon sagt eine Variable die eine Addresse speichert und somit irgendwo in den Hauptspeicher zeigt.
    Mit der Zuweisung char *txt="Hallo"; machst du nichts anderes als die Addresse des ersten zeichens deines "Hallo" strings im Zeiger zuspeichern. Da es sich um eine char Zeiger handelt und ein char meistens ein byte sprich 8 bit groß ist ergibt ein increment des Zeigers mittel txt++ die ursprüngliche Address+offset 8 bit und das ist die Addresse des zweiten Zeichens. Wenn du jetz den wert des zweiten Zeichens haben willst musst du es nur noch mittels * dereferenzieren. Deswegen funktioniert *(txt+1) oder auch *(++txt).
    Das selbe gilt für alle anderen Zeiger nur as sich der Offset ändert je nach type des Zeigers.



  • Wichtig ist vielleicht noch zu wissen, dass mit einer Variableninitialisierung wie 'char *txt="Hallo";' das kompilierte und ausgeführte Programm an dieser Stelle des Codes einen Speicherbereich für Hallo\0 im Read-Only-Bereich des Hauptspeichers reserviert (zumindest bei gcc standardmäßig so, wenn nicht explizit angegeben) und dann den Zeiger auf die Anfangsadresse (des ersten chars) dieses Speicherbereichs setzt. Durch das Read-only kannst du logischerweise das "Hallo" nicht verändern, du kannst nur den Zeiger woanders hin zeigen lassen oder ihm explizit mit Speicher-Allozierung Speicher zuweisen, den es verändern kann...


Anmelden zum Antworten