Wat is tijd (NULL) in C?

Ik leer over enkele basisfuncties van C en ben time(NULL)tegengekomen in sommige handleidingen.

Wat betekent dit precies?


Antwoord 1, autoriteit 100%

Je kunt een aanwijzer doorgeven aan een time_tobject dat timezal vullen met de huidige tijd (en de geretourneerde waarde is dezelfde die je aanwees) . Als je NULLdoorgeeft, negeert het het gewoon en retourneert het alleen een nieuw time_t-object dat de huidige tijd vertegenwoordigt.


Antwoord 2, autoriteit 79%

De aanroep van time(NULL)retourneert de huidige kalendertijd (seconden sinds 1 januari 1970). Zie deze referentievoor details. Gewoonlijk, als u een pointer doorgeeft aan een time_tvariabele, die aanwijzervariabele wijst naar de huidige tijd.


Antwoord 3, autoriteit 57%

[Antwoord gekopieerd van een dubbele, nu verwijderde vraag.]

time()is een zeer, zeer oude functie. Het gaat terug tot een dag dat de C-taal niet eens het type longhad. Er was eens de enige manier om zoiets als een 32-bits type te krijgen door een array van twee ints te gebruiken — en dat was toen ints 16 bits waren .

Dus je hebt gebeld

int now[2];
time(now);

en het vulde de 32-bits tijd in now[0]en now[1], 16 bits tegelijk. (Dit verklaart waarom de andere tijdgerelateerde functies, zoals localtimeen ctime, ook hun tijdargumenten via aanwijzers accepteren.)

Later, DMR klaar met toevoegen longnaar de compiler , dus je zou kunnen zeggen

long now;
time(&now);

Latere later besefte iemand dat het handig zou zijn als time()doorging en de waarde terugstuurde, in plaats van het in te vullen via een aanwijzer. Maar – achterwaartse compatibiliteit is een prachtig ding – ten behoeve van alle code die nog steeds aan het doen was time(&now), de time()-functie moest blijven ondersteunen het pointer-argument. Dat is de reden waarom – en dit is de reden waarom achterwaartse compatibiliteit niet altijd zo’n geweldig ding is, immers – als u de retourwaarde gebruikt, moet u nog steeds nul passeren als een aanwijzer:

long now = time(NULL);

(later nog steeds, natuurlijk, zijn we begonnen met het gebruik van time_tin plaats van gewone longvoor tijden, zodat het bijvoorbeeld kan worden gewijzigd in een 64-bits Type, Dodging de Y2.038K probleem .)

[P.S. Ik weet niet zeker dat de verandering van int [2]naar long, en de wijziging om de retourwaarde toevoegt, gebeurde op verschillende tijden; ze kunnen tegelijkertijd zijn gebeurd. Maar merk op dat wanneer de tijd werd weergegeven als een array, het had ingevuld om via een aanwijzer in te vullen, het niet als een waarde kan worden geretourneerd, omdat natuurlijk c-functies geen arrays kunnen retourneren. ]


4, Autoriteit 6%

Time: Het geeft de tijd weer die is verstreken in seconden sinds de EPOCH 1 Jan 1970


5, Autoriteit 2%

int main (void)
{   
    //print time in seconds from 1 Jan 1970 using c   
    float n = time(NULL);   
    printf("%.2f\n" , n);      
}      

Deze drukt 1481986944.00 (op dit moment).


6

U kunt een aanwijzer op een time_t-bezetting laten passeren die tijd zal vullen met de huidige tijd (en de retourwaarde is dezelfde die u hebt gewezen). Als u doorgeeft NULL, negeert het gewoon en retourneert slechts een nieuwe time_tobjecten die de huidige tijd weergeeft.

Nb:time(&timer);is gelijk aan timer = time(NULL);

Other episodes