重复调用C函数中的静态变量

时间:2016-12-07 10:41:43

标签: c static initialization

我正在编写一个多次调用的函数,我想要一个指向列表开头的静态指针。我需要函数,无论调用多少次,都可以访问同一个列表,所以我有两个问题。

  1. 我是对的,如果我声明static t_line *begin = NULL;其中t_line是我的结构,我相信它会在调用main()之前已经分配了正确的空格,因为我理解static变量,然后这将给我一个具有正确分配大小的空指针。

  2. 一旦我给静态指针指定了列表中第一个元素的地址,下次调用该函数并且它到达该声明行时,它不会只将它重置为NULL并且我失去了指针?

1 个答案:

答案 0 :(得分:1)

static存储空间的变量只初始化一次,你很高兴。

引用C11,章节§6.2.4,强调我的

  

在没有存储类说明符的情况下声明其标识符的对象   _Thread_local,可以是外部或内部链接,也可以是存储类   说明符static具有静态存储持续时间。它的一生就是整个执行   程序和其存储的值仅在程序启动之前初始化一次。

那说,关于保留最后存储的值,引用第2段,(再次,我的重点

  

对象的生命周期是存储期间程序执行的一部分   保证为它保留。存在一个对象,具有一个常量地址, 33)保留   它在其整个生命周期中的最后存储值。 34) [....]

,对于static变量,如上所述

  

它的生命周期是整个执行的   程序