Brauche Erklärung bei Zeiger



  • Hi. Irgendwie check ich das mit den Zeigern net so richtig. In allen Büchern steht immer das man mit *Zeiger auf die Variable wohin der Zeiger zeigt zugreife. Ich sehe aber öfter Beispiele wo das ohne * ist. Hier ein Beispiel:

    #include <iostream>
    using namespace std;
    #include <time.h>
    
    int main()
    {
        time_t Zeitstempel;
        tm *nun;
        Zeitstempel = time(0);
        nun = localtime(&Zeitstempel);
        cout << nun->tm_mday << '.' << nun->tm_mon+1 << '.'
            << nun->tm_year+1900 << " - " << nun->tm_hour
            << ':' << nun->tm_min << endl;
    }
    

    Ich meine hier die Zeile

    nun = localtime(&Zeitstempel);
    

    Hier schreibt er doch die Zeit direkt in den Zeiger und nicht dahin wo der Zeiger zeigt oder?

    cout << nun->tm_mday << '.' << nun->tm_mon+1 << '.'
    

    Und hier gibt er doch auch den Zeiger selber aus als dahin wo er zeigt. Ich versteh das irgendwie nicht. Könnt ihr mir das mal erklären`?

    Gruß Alex



  • Ein Zeiger besteht aus zwei "Teilen" - Adresse und Inhalt. Mit 'nun' manipulierst du die Adresse und damit die Information, wo im Speicher der Inhalt steht. Mit '*nun' kommst du an den Inhalt hinter dem Zeiger heran.

    PS: und der Ausdruck 'nun->tm_mday' ist nur eine Kurzform für '(*nun).tm_mday' - der kombiniert die Dereferenzierung und Elementzugriff.



  • AlexDozer schrieb:

    Ich meine hier die Zeile

    nun = localtime(&Zeitstempel);
    

    localtime gibt einen Zeiger auf die Timestruktur zurück und dieser wird "nun" zugwiesen.

    AlexDozer schrieb:

    Hier schreibt er doch die Zeit direkt in den Zeiger und nicht dahin wo der Zeiger zeigt oder?

    cout << nun->tm_mday << '.' << nun->tm_mon+1 << '.'
    

    Nein. Hier werden lediglich Daten von der Zeitstruktur ausgegeben mit dem Operator ->. Es könnte auch per Derefenzierung geschehen:

    std::cout << (*nun).tm_mday << std::endl;
    


  • Danke für die Erklärung!


Anmelden zum Antworten