关于以下代码:
#include <stdio.h>
int lastval(void)
{
`static int k = 0;
return k++;
}
int main(void)
{
int i = 0;
printf("I previously said %d\n", lastval());
i++;
i++;
i++;
i++;
i++;
printf("I previously said %d\n", lastval());
i++;
i++;
i++;
printf("I previously said %d\n", lastval());
i++;
i++;
i++;
printf("I previously said %d", lastval());
i++;
i++;
i++;
return 0;
}
谁能向我解释静态如何保持其价值?我虽然这是因为函数的堆栈框架在返回后没有被破坏所以我编写了这段代码以在 gdb 下运行它,并且在每行之后进行回溯之后,只有 main 的堆栈框架出现(当我这样做时它甚至没有列出 lastval回溯坐在 printf 调用上,但无论如何)。
它的 k 实际是如何存储的?我知道这不像一个普通变量,因为第一个 k++ 返回 1 而不是 0,并且它不像全局变量,因为例如我无法在 main 中访问 k,所以.. 发生了什么?
`on a local k, K++ // 总是返回 0
`在全局 k = 0, k++ // 返回 0, 1, 2
`在静态 k, k++ // 返回 1, 2 ,3
谁能帮我理解这两个问题?