c - 为什么以下两个段的输出不同?
问题描述
#include <stdio.h>
int main()
{
static int i = 5; // here
if (--i){
printf("%d ", i);
main();
}
}
输出:4 3 2 1
#include <stdio.h>
int main()
{
int i = 5; // here
if (--i){
printf("%d ", i);
main();
}
}
输出:4 4 4 4...(分段错误)
知道如何只考虑一次静态 int 变量并且一次又一次地接管 int 吗?
解决方案
当您在函数中声明static
变量时,即使在函数终止后,函数也会“记住”变量的最后一个值。
void Foo() {
static int x = 5;
}
在上面的例子中,你告诉编译器x
应该被“记住”并且初始值为5
. 后续调用Foo()
不会重新分配x
的值5
,而是使用先前记住的值。
相比之下:
void Bar() {
int x = 5;
}
在这里,您告诉编译器每次Bar()
执行时,x
都将在堆栈上创建一个新变量并为其赋值5
。
推荐阅读
- flutter - Flutter Web 错误 - 在调度程序回调期间引发以下 UnimplementedError
- java - 十进制除法
- performance - 调整我的 Apache Storm 序列化程序以提高性能
- c# - 使用没有 Assembly.Load 或类似的 P/invoke 调用托管 C# 库
- scala - Incorrect type inference while pattern matching in Scala
- linux - makefile:“没有规则来制作目标 'arch/x86_64/Makefile'” linux 内核 2.2.0
- c++ - “使用类模板需要模板参数”错误,默认指定的非类型模板参数值
- oracle - Oracle 时间戳之间的差异
- jobs - 删除作业表单集群
- python - 无法安装 PyCurl