我一直在用C语言工作,我以为指针不应该指向局部变量,但是库里有一个函数gmtime(),好像是返回一个指向里面创建的变量的指针。我的理解是否正确?
time_t epochTime;
time(&epochTime);
struct tm *currentTime=gmtime(&epochTime);
内部的。gmtime
包含一个用 static
存储类指定符。 这意味着该变量具有完整的程序寿命,因此从函数中返回其地址是有效的。
这也就意味着,如果你把这个指针保存在某个地方,然后再调用 gmtime
再次使用不同的参数,它改变了保存的指针的指向。
它不是返回一个指向局部变量的指针,而是返回一个指向静态分配的内存区域的指针。
来自man页。
返回值指向一个静态分配的结构,它可能会被后续对任何日期和时间函数的调用覆盖。
一个静态分配的内存区域可以是一个全局变量,或者是一个 static
本地变量。 后者不存在于堆栈中,而是存在于 data
段,以及其他静态分配的数据成员。