Что такое время (NULL) в C? - PullRequest
       0

Что такое время (NULL) в C?

52 голосов
/ 26 сентября 2011

Я узнал о некоторых основных функциях C и встречал time(NULL) в некоторых руководствах.

Что именно это значит?

Ответы [ 8 ]

42 голосов
/ 26 сентября 2011

Вы можете передать указатель на объект time_t, который time заполнит текущим временем (и возвращаемое значение будет тем же, на которое вы указали). Если вы передаете NULL, он просто игнорирует его и просто возвращает новый time_t объект, представляющий текущее время.

28 голосов
/ 26 сентября 2011

Вызов time(NULL) возвращает текущее календарное время (секунды с 1 января 1970 г.). Смотрите эту ссылку для деталей. Обычно, если вы передаете указатель на переменную time_t , эта переменная указателя будет указывать на текущее время.

11 голосов
/ 03 сентября 2017

[Ответ скопирован с дубликата, теперь удаленного вопроса .]

time() - очень, очень старая функция. Это восходит к тому дню, когда язык Си даже не имел типа long. Давным-давно, единственный способ получить что-то похожее на 32-битный тип - это использовать массив из двух int s - и тогда int s были 16 битами.

Так вы позвонили

int now[2];
time(now);

и он заполнил 32-битное время до now[0] и now[1], 16 бит за раз. (Это объясняет, почему другие связанные со временем функции, такие как localtime и ctime, также склонны принимать свои аргументы времени через указатели.)

Позже dmr завершил добавление long к компилятору, чтобы вы могли начать говорить

long now;
time(&now);

Еще позже кто-то понял, что было бы полезно, если бы time() пошел дальше и вернул значение, а не просто заполнил его через указатель. Но - обратная совместимость - замечательная вещь - в интересах всего кода, который все еще выполнял time(&now), функция time() должна была поддерживать аргумент указателя. Вот почему - и именно поэтому обратная совместимость не всегда такая замечательная вещь - если вы используете возвращаемое значение, вы все равно должны передать NULL в качестве указателя:

long now = time(NULL);

(Позже, конечно, мы начали использовать time_t вместо обычного long для времен, так что, например, его можно изменить на 64-битный тип, уклонившись от y2.038k проблема .)

[P.S. На самом деле я не уверен, что изменение с int [2] на long и изменение добавления возвращаемого значения происходили в разное время; они могли произойти одновременно. Но обратите внимание, что когда время было представлено в виде массива, оно имело для заполнения через указатель, оно не могло быть возвращено как значение, потому что функции C, конечно, не могут возвращать массивы.]

3 голосов
/ 26 сентября 2011

Time: возвращает время, прошедшее в секундах с начала эпохи 1 января 1970

3 голосов
/ 26 сентября 2011

Функция time возвращает текущее время (в виде значения time_t) в секундах с некоторой точки (в системах Unix с полуночи UTC 1 января 1970 г.) и принимает один аргумент - указатель time_t в котором хранится время. Передача NULL в качестве аргумента заставляет time возвращать время как нормальное возвращаемое значение, но не сохранять его где-либо еще.

2 голосов
/ 17 декабря 2016
int main (void)
{   
    //print time in seconds from 1 Jan 1970 using c   
    float n = time(NULL);   
    printf("%.2f\n" , n);      
}      

печатается 1481986944,00 (в данный момент).

1 голос
/ 26 сентября 2011

Вы должны обратиться к документации для ctime .time - это функция, которая принимает один параметр типа time_t * (указатель на объект time_t) и присваивает ему текущее время.Вместо передачи этого указателя вы также можете передать NULL и затем использовать вместо него возвращенное значение time_t.

0 голосов
/ 08 марта 2015

Вы можете передать указатель на объект time_t, который будет заполняться текущим временем (и возвращаемое значение будет тем же, на которое вы указали).Если вы передаете NULL, он просто игнорирует его и просто возвращает новый объект time_t, представляющий текущее время.

Nb:time(&timer); эквивалентно timer = time(NULL);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...