C gmtime () Область видимости переменной - PullRequest
0 голосов
/ 18 июня 2020

Я работал с C и думал, что указатель не должен указывать на локальную переменную, но в библиотеке есть функция gmtime (), которая, кажется, возвращает указатель на переменную, созданную внутри нее. Я правильно понимаю?

time_t epochTime;
time(&epochTime);
struct tm *currentTime=gmtime(&epochTime);

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Внутри gmtime содержит переменную, объявленную с помощью спецификатора класса хранения static. Это означает, что переменная имеет полное время существования программы и, следовательно, ее адрес можно вернуть из функции. изменяет то, на что указывает сохраненный указатель.

0 голосов
/ 18 июня 2020

Он не возвращает указатель на локальную переменную, а возвращает указатель на статически выделенную область памяти.

Из справочной страницы:

Возвращаемое значение указывает на статически выделенная структура, которая может быть перезаписана последующими вызовами любой из функций даты и времени.

Статически выделенная область памяти может быть просто глобальной переменной или static локальной переменной. Последний не существует в стеке, а скорее в сегменте data вместе с другим статически распределенным элементом данных.

...