3 回答
TA贡献1906条经验 获得超3个赞
这里有两个问题,生存期和范围。
变量的范围是可以看到变量名称的位置。在此,x仅在函数foo()中可见。
变量的生存期是变量存在的时间。如果x是在没有关键字static的情况下定义的,则生存期将是从foo()的条目到foo()的返回;因此每次调用都会将其重新初始化为5。
关键字static的作用是将变量的生存期延长到程序的生存期;例如,初始化仅发生一次,然后该变量将在以后对foo()的所有调用中保留其值-无论它变为何种值。
TA贡献1772条经验 获得超6个赞
输出:6 7
原因:静态变量仅初始化一次(不同于自动变量),并且在运行时将忽略静态变量的进一步定义。并且,如果未手动初始化,则会自动通过值0进行初始化。所以,
void foo() {
static int x = 5; // assigns value of 5 only once
x++;
printf("%d", x);
}
int main() {
foo(); // x = 6
foo(); // x = 7
return 0;
}
TA贡献1812条经验 获得超5个赞
与具有以下程序相同:
static int x = 5;
void foo()
{
x++;
printf("%d", x);
}
int main()
{
foo();
foo();
return 0;
}
static关键字在该程序中所做的全部工作是(实际上)告诉编译器“嘿,我在这里有一个变量,我不希望其他人访问,也不告诉其他人它存在”。
在方法内部,static关键字告诉编译器与上面相同,但是,“不要告诉任何人此函数存在于此函数之外,只能在此函数内部访问”。
我希望这有帮助
- 3 回答
- 0 关注
- 481 浏览
添加回答
举报