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!