我正在编写一个多次调用的函数,我想要一个指向列表开头的静态指针。我需要函数,无论调用多少次,都可以访问同一个列表,所以我有两个问题。
我是对的,如果我声明static t_line *begin = NULL;
其中t_line
是我的结构,我相信它会在调用main()
之前已经分配了正确的空格,因为我理解static
变量,然后这将给我一个具有正确分配大小的空指针。
一旦我给静态指针指定了列表中第一个元素的地址,下次调用该函数并且它到达该声明行时,它不会只将它重置为NULL
并且我失去了指针?
答案 0 :(得分:1)
static
存储空间的变量只初始化一次,你很高兴。
引用C11
,章节§6.2.4,强调我的
在没有存储类说明符的情况下声明其标识符的对象
_Thread_local
,可以是外部或内部链接,也可以是存储类 说明符static
具有静态存储持续时间。它的一生就是整个执行 程序和其存储的值仅在程序启动之前初始化一次。
那说,关于保留最后存储的值,引用第2段,(再次,我的重点)
对象的生命周期是存储期间程序执行的一部分 保证为它保留。存在一个对象,具有一个常量地址, 33)和保留 它在其整个生命周期中的最后存储值。 34) [....]
,对于static
变量,如上所述
它的生命周期是整个执行的 程序