2010-05-28 14 views
10

Wirklich einfache Frage. Nach meinen Mann-Seite, werden diese zwei das Gleiche tun:Zeit (NULL); vs Zeit (& etwas);

time_t t; 
time(&t); 

printf("Time: %ld", t); 

...

printf("Time: %ld", time(NULL)); 

Also, was genau ist der Nutzen der einen Zeiger auf Zeit vergeht? Wenn time() fehlschlagen würde, weil keine Uhr verfügbar ist, hat keine der beiden Varianten meiner Meinung nach einen Vorteil.

Antwort

8

Der Vorteil wäre, dass Sie die Daten nach dem Aufruf von 'time' nicht in eine andere Struktur kopieren müssen.

Wenn Sie z.B. Wenn Sie einen Datenpuffer erstellen, der an eine andere Anwendung/einen anderen Server gesendet werden soll, müssen Sie die Daten kopieren, was zusätzlichen Overhead bedeutet. Wenn Sie einen Zeiger in Ihre Datenstruktur einfügen, können Sie ihn in einer Aufnahme an die richtige Stelle setzen.

Natürlich, wenn Sie nur für die Daten verwenden, um es in ein anderes Format wie ein Text printf zu konvertieren, dann ist es effizienter, es mit NULL aufzurufen und den zusätzlichen Speicher für Ihr erstes Beispiel speichern.

Schließlich, da die Zeitfunktion einen einzigen Ort für die Speicherung ihrer internen Zeitstruktur verwendet, wäre die erste Methode threadsicherer, obwohl ich mich nicht mehr an den Kopf erinnern kann, wenn 'Zeit' threadsicher ist.

0

Von der Mann-Seite:

Time_t Zeit (time_t * t);

"Wenn t nicht NULL ist, wird der Rückgabewert auch in dem Speicher gespeichert, auf den t zeigt."

Ich denke, es ist nur Vermächtnis Zeug.

+1

Das OP bekommt das. Er fragt _why_ Sie würden einen Nicht-NULL-Zeiger übergeben. –

1

Die meisten Beispiele, die ich gesehen habe, passieren NULL. Ich sehe ebenfalls keinen Nutzen darin, einen aussagekräftigen Zeiger zu übergeben, zumal time_t eigentlich immer nur ein ganzzahliger Typ ist.

0

Zeiger auf time_t Wert übergeben als Funktionsargument - IMO das ist ein Grund, warum die Syntax existiert.

time_t *foo(time_t *dest) 
{ 
    time(dest); 
    /* do something with dest here */ 
    return dest; 
}