Frage zu Zeigern



  • Hi,

    ich hänge gerade an folgender Aufgabe:

    Geben Sie nun zweimal die Adressen der einzelnen Feldelemente aus,
    in dem Sie einmal den Adressoperator in Verbindung mit dem Indexoperator verwenden und einmal
    einen Zeiger als Laufvariable.

    Wenn ich die Adressen ausgeben möchte würde ich spontan so vorgehen:

    for (i = 0; i < 20; i++)
      {
        printf("Adresse Feld %d: %d\n", i+1, &feld[i]);    
      }
    

    Handelt es sich dabei um die Methode mit dem Indexoperator ? Wenn ja was kann man sich unter der Ausgabe per Laufvariable vorstellen ?

    Gruß Yannic



  • Ja, Aufgabenteil 1 sollte so korrekt gelöst sein. Die Schleife von Aufgabenteil 2 könnte so aussehen:

    int feld[20];
    for (int *i = feld; i - feld != sizeof(feld) / sizeof(*feld); ++i)
    {
    }
    

    Edit: (sizeof(feld) / sizeof(*feld) ergibt hier genau 20, != ist bei Einzelschritten gleichbedeutend mit <.)



  • Einfacher ist es evtl. bei Strings, da du da über den Inhalt der Speicherstelle das Ende erkennen kannst.

    char text[] = "Hallo Welt!";
    int i;
    char *pc;
    
    for(i=0;text[i] != 0; ++i)
      printf("Adresse: %p\n", &text[i]);
    
    for(pc=feld;*pc != 0; ++pc)
      printf("Adresse: %p\n", pc);
    


  • int i,feld[20],*zeiger=feld;
    for (i = 0; i < 20; i++,zeiger++)
      {
        printf("Adresse Feld %p: %p\n", &feld[i],zeiger);    
      }
    


  • Danke für die vielen Beispiele 🙂 Immer interessant zu sehen auf wie vielen Wegen man ans selbe Ziel kommen kann.

    Gruß Yannic


Anmelden zum Antworten