Возвращаемое значение указатель на статический внутренний std::tm объект при успешном выполнении или NULL в противном случае. Структура может быть разделена между std::gmtime, std::localtime и std::ctime и может быть перезаписана при каждом вызове.
Ответ 2
Нет, не стоит. Эта структура статически распределена и разделяется функциями gmtime и localtime. Каждый раз, когда называется одна из этих функций, содержимое этой структуры перезаписывается.
Поэтому будьте осторожны с результатами - например, скопируйте их немедленно и не храните указатель.