Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

это печатает 1481986944.00 (на данный момент).

Ответ 6

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

Ответ 7

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

time() - очень старая функция. Он восходит к тому дню, когда на языке C не было типа long. Когда-то, единственный способ получить что-то вроде 32-битного типа состоял в том, чтобы использовать массив из двух int - и это было тогда, когда int были 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 вместо plain long для времени, так что, например, его можно изменить на 64-разрядный тип, уклонившись от проблемы y2.038k.)

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

Ответ 8

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

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