Время (NULL); vs time (& something);
Реальный простой вопрос. Согласно моей man-странице, эти два будут делать то же самое:
time_t t;
time(&t);
printf("Time: %ld", t);
...
printf("Time: %ld", time(NULL));
Итак, в чем же преимущество передачи указателя на время? В случае отказа time()
из-за отсутствия доступных часов ни один из двух вариантов не будет иметь никакой пользы, на мой взгляд.
Ответы
Ответ 1
Выгода будет заключаться в том, что вам не нужно копировать данные в другую структуру после вызова "времени".
Если вы, например, подготовка буфера данных для отправки другому приложению/серверу вам придется скопировать данные, что является дополнительным издержками. Пропуская указатель в вашу структуру данных, вы можете поместить его в нужное место одним выстрелом.
Конечно, если вы используете только данные для преобразования его в другой формат, такой как текстовый printf, то более эффективно вызывать его с помощью NULL и сохранять дополнительное хранилище, требуемое в первом примере.
Наконец, поскольку функция времени использует одно место для хранения внутренней структуры времени, первый метод был бы более потокобезопасным, хотя я не могу вспомнить о верхней части головы, если "время" на самом деле является безопасным потоком.
Ответ 2
Большинство примеров, которые я видел, проходят NULL
. Я также не вижу преимуществ при передаче значащего указателя, тем более что time_t
почти всегда является целым типом.
Ответ 3
Из man-страницы:
time_t time (time_t * t);
"Если t не является NULL, возвращаемое значение также будет сохранено в памяти, на которую указывает t."
Я предполагаю, что это просто устаревший материал.
Ответ 4
Указатель на значение time_t, переданное как аргумент функции -
IMO - одна из причин существования синтаксиса.
time_t *foo(time_t *dest)
{
time(dest);
/* do something with dest here */
return dest;
}