Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中解释这个“静态变量”的行为_C_Debugging_Static Variables - Fatal编程技术网

在C语言中解释这个“静态变量”的行为

在C语言中解释这个“静态变量”的行为,c,debugging,static-variables,C,Debugging,Static Variables,我正在读《黑客,剥削的艺术》一书,这个代码示例真的让我困惑 它位于全局变量范围的上下文中: #include <stdio.h> void function() { // An example function, with its own context int var = 5; static int static_var = 5; // Static variable initialization printf("\t[in function] var =

我正在读《黑客,剥削的艺术》一书,这个代码示例真的让我困惑

它位于全局变量范围的上下文中:

#include <stdio.h>

void function() { // An example function, with its own context
    int var = 5;
    static int static_var = 5; // Static variable initialization
    printf("\t[in function] var = %d\n", var);
    printf("\t[in function] static_var = %d\n", static_var);
    var++; // Add one to var.
    static_var++; // Add one to static_var.
}

int main() { // The main function, with its own context
    int i;
    static int static_var = 1337; // Another static, in a different context
    for(i=0; i < 5; i++) { // Loop 5 times.
        printf("[in main] static_var = %d\n", static_var);
        function(); // Call the function.
    }
}
问题是,为什么[函数中]var=5保持稳定?我们定义了var++;以及静态_var++;在本地功能中。发生了什么事

因为var不是静态的。每次调用函数时,它都是一个不同的实例。

var++;
在函数中,不再使用该局部变量。当函数返回时,它超出范围并不再存在。下次调用函数时,将分配一个新的var并将其初始化为5

这两个静态变量具有静态存储持续时间,它们存在于程序的整个生命周期中。对这些文件的任何修改都将持续存在,并且仅初始化一次


因此,当下次调用函数时,上一次调用中的增量仍然有效,除非在第一次调用中,否则不会执行初始化。

这正是静态变量与非静态变量的区别所在。静态变量具有静态存储持续时间,这意味着该变量在程序运行期间保持活动状态。非静态变量具有自动存储持续时间;这意味着它将在本例中创建它的范围结束时,即函数结束时消失。释放变量后,下次调用函数时,将创建该变量的新实例。

因为这就是非静态局部变量的工作方式?您希望静态变量和非静态变量之间有什么不同?当您非常清楚地询问非静态局部变量时,为什么这个问题的标题是静态变量的奇怪行为?PS,我不得不问:这是一本关于剥削的书中N的第1章或第0章。什么是N?谢谢你的评论。。我更改了问题的标题。。。
var++;