为了账号安全,请及时绑定邮箱和手机立即绑定

C函数内部的静态变量

C函数内部的静态变量

C
慕森王 2019-11-27 13:04:50
什么将被打印出来?6 6或6 7?又为什么呢?void foo(){    static int x = 5;    x++;    printf("%d", x);}int main(){    foo();    foo();    return 0;}
查看完整描述

3 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

这里有两个问题,生存期和范围。


变量的范围是可以看到变量名称的位置。在此,x仅在函数foo()中可见。


变量的生存期是变量存在的时间。如果x是在没有关键字static的情况下定义的,则生存期将是从foo()的条目到foo()的返回;因此每次调用都会将其重新初始化为5。


关键字static的作用是将变量的生存期延长到程序的生存期;例如,初始化仅发生一次,然后该变量将在以后对foo()的所有调用中保留其值-无论它变为何种值。


查看完整回答
反对 回复 2019-11-27
?
梦里花落0921

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;

}


查看完整回答
反对 回复 2019-11-27
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

与具有以下程序相同:


static int x = 5;


void foo()

{

    x++;

    printf("%d", x);

}


int main()

{

     foo();

     foo();

     return 0;

}

static关键字在该程序中所做的全部工作是(实际上)告诉编译器“嘿,我在这里有一个变量,我不希望其他人访问,也不告诉其他人它存在”。


在方法内部,static关键字告诉编译器与上面相同,但是,“不要告诉任何人此函数存在于此函数之外,只能在此函数内部访问”。


我希望这有帮助


查看完整回答
反对 回复 2019-11-27
  • 3 回答
  • 0 关注
  • 481 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信