время (ПУСТОЙ УКАЗАТЕЛЬ); по сравнению со временем (&something);

Реальный простой вопрос. Согласно моей странице справочника, эти два сделают то же:

time_t t;
time(&t);

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

...

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

Так, что точно действительно ли преимущество передачи является указателем на время? В случае, если time() не перестал бы работать ни из-за каких часов, являющихся доступным, ни один из этих двух вариантов не будет обладать никаким преимуществом, по-моему.

10
задан LukeN 28 May 2010 в 11:34
поделиться

4 ответа

Преимущество состоит в том, что вам не нужно копировать данные в другую структуру после вызова time.

Если вы, например, подготовка буфера данных для отправки в другое приложение / сервер, вам придется скопировать данные, что является дополнительными накладными расходами. Передав указатель в свою структуру данных, вы можете сразу поместить его в нужное место.

Конечно, если вы используете данные только для преобразования их в другой формат, такой как текстовый printf, то более эффективно вызывать его с NULL и сохранять дополнительное хранилище, необходимое для вашего первого примера.

Наконец, поскольку функция времени использует одно место для хранения своей внутренней структуры времени, первый метод был бы более потокобезопасным, хотя я не могу вспомнить, что на самом деле «время» является потокобезопасным.

8
ответ дан 4 December 2019 в 01:55
поделиться

Из man-page:

time_t time(time_t *t);

"If t is non-NULL, return value will also be stored in the memory pointed to by t."

I guess it's just legacy stuff.

0
ответ дан 4 December 2019 в 01:55
поделиться

Большинство примеров, которые я видел, проходили NULL . Точно так же я не вижу пользы в передаче значимого указателя, тем более что time_t почти всегда является просто целочисленным типом.

1
ответ дан 4 December 2019 в 01:55
поделиться

Указатель на значение time_t, переданный в качестве аргумента функции - ИМО, это одна из причин, по которой существует синтаксис.

time_t *foo(time_t *dest)
{
     time(dest);
     /* do something with dest here */
     return dest;
}
0
ответ дан 4 December 2019 в 01:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: