在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++;