Anfänger; Frage zu Zeigern auf Arrays



  • Hallo,

    ich beschäftige mich gerade mit Zeigern und habe ein kleines Verständnisproblem. Und zwar verstehe ich nicht, warum dieses Programm richtig läuft 😕

    #include <stdio.h>
    
    int main (void)
    {
    
    	char wort[]="Timbuktu";
    	char *pointer=&wort[0];
    
    	printf("\n");
    	printf("\nPointer zeigt auf Adr.\t: %X", pointer);
    	printf("\nAdresse des 1. Elements\t: %X", &wort[0]);
    	printf("\nAdresse des 2. Elements\t: %X", &wort[1]);
    	printf("\nPointer zeigt auf Wort\t: %s", pointer);
    	printf("\n");
    
    }
    

    Warum muss ich in Zeile 13 die Variable pointer nicht dereferenzieren? Wenn der Zeiger nicht auf ein char-Array sondern nur auf eine int-Zahl zeigt, muss ich ihn immer dereferenzieren. Ich versteh nicht, warum ich mit dem Aufruf der gleichen Variable (pointer) zwei unterschiedliche Ausgaben bekommen kann. pointer ist doch mit einer Adresse belegt und nicht mit dem Wort Timbuktu.

    Ich würde gern verstehen warum das so ist.

    Danke schonmal für eine kurze aber erleuchtende Erklärung.



  • Würd_gern_C_können schrieb:

    Warum muss ich in Zeile 13 die Variable pointer nicht dereferenzieren?

    das macht 'printf' für dich.
    printf bekommt den pointer und das '%s' (gib eine zeichenkette aus), was ihm sagt, dass es dereferenzieren soll...
    🙂

    edit, wenn du willst, dass printf die adresse ausgeben soll, dann mach's mit '%p'



  • Oh das ging ja wirklich schnell. Vielen Dank erstmal für die Antwort.

    printf dereferenziert also pointer, weil ich ihm mit %s die Info übergebe, dass er eine Zeichenkette ausgeben soll.

    Ich hab grad nochmal was probiert, wär cool wenn Du mir sagen könntest ob ich das richtig verstanden hab. Ich habe also anstelle von %s ein %c eingegeben. Jetzt hat das Programm mir irgendein ASCII Zeichen ausgespuckt. Ich nehme mal an, printf hat jetzt nicht mehr dereferenziert, sondern mir nur die hex-Adresse von pointer in ASCII übersetzt und mir diese ausgegeben. Ist das richtig?

    auch edit 😃 : stimmt, das mit %p funzt besser!



  • Würd_gern_C_können schrieb:

    Ich habe also anstelle von %s ein %c eingegeben. Jetzt hat das Programm mir irgendein ASCII Zeichen ausgespuckt. Ich nehme mal an, printf hat jetzt nicht mehr dereferenziert, sondern mir nur die hex-Adresse von pointer in ASCII übersetzt und mir diese ausgegeben. Ist das richtig?

    so ungefähr.
    printf hat den pointer als einzelnes zeichen interpretiert, es verkrüppelt wahrscheinlich den pointer mit einem type-cast nach 'char' und dabei werden alle bits abgschnitten, die nicht mehr in einen 'char' passen.
    mit 'hex' hat das aber nichts zu tun...
    🙂



  • Oh alles klar, da war meine Schlussfolgerung ein bisschen vorschnell. Kannste mal sehen was einem Anfänger so durch den Kopf gehen kann... 😮

    Danke dass Du Dich meinem Problemchen angenommen hast!


Anmelden zum Antworten