c/c++开发分享每次调用父函数时,C中的静态变量是否重新分配?

假设我在C中的函数内声明了一个静态变量。

如果我多次调用该函数,那么每次调用函数时,是否会在内存中重新分配静态变量?

如果确实重新分配,为什么始终保持最后一个值?

例:

void add() { static int x = 1; x++; printf("%dn",x); } int main() { add(); // return 2 add(); // return 3 add(); // return 4 } 

    否 – 静态变量基本上是位于本地名称空间内的全局变量。

    不,每次都不会重新分配变量。 它就像有一个全局变量,但它只有局部范围; 即,您只能从该函数内部引用它。

    没有,

    如何在函数调用之间保留它的价值呢?

    在这方面,静态变量就像全局变量,但它们是周围范围(函数,类,命名空间)的本地变量。

    每次调用函数时都不会重新分配静态变量。 它们充当正常的局部变量。 但它们的存储持续时间不同,即当函数为静态变量赋值时,该值在函数调用之间保留。

    在C编程语言中,static与全局变量和函数一起使用,以将其范围设置为包含文件。 在局部变量中,static用于将变量存储在静态分配的内存中,而不是自动分配的内存中。 虽然该语言没有规定任何类型的存储器的实现,但是静态分配的存储器通常在编译时保留在程序的数据段中,而自动分配的存储器通常被实现为瞬态调用栈。

    由于静态前缀表明该变量位于静态内存中,该内存包含在编译时已知地址的变量(对于全局变量来说,这是一种有点迂腐的方式)。 这与自动变量(在堆栈上分配)和动态变量(使用malloc在堆上分配)不同。

    函数(或其他静态)中的静态变量的初始化在程序运行之前执行。 更确切地说,它意味着它只能是一些常量表达式,编译器可以在编译时获得。

    这意味着以下程序无效:

     int f(int x){ return x+1; } int main(){ static int a = f(1); return a; } 

    当我用gcc编译它时,它会按预期抱怨以下消息:

     error: initializer element is not constant 

    但是,当程序运行时,您可以将静态变量的值更改为任何其他变量。

      以上就是c/c++开发分享每次调用父函数时,C中的静态变量是否重新分配?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(猴子技术宅)。

      本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/545998.html

      发表评论

      电子邮件地址不会被公开。 必填项已用*标注