C函数内部的静态变量

什么将被打印出来?6 6或6 7?又为什么呢?


void foo()

{

    static int x = 5;

    x++;

    printf("%d", x);

}


int main()

{

    foo();

    foo();

    return 0;

}


慕森王
浏览 482回答 3
3回答

一只名叫tom的猫

这里有两个问题,生存期和范围。变量的范围是可以看到变量名称的位置。在此,x仅在函数foo()中可见。变量的生存期是变量存在的时间。如果x是在没有关键字static的情况下定义的,则生存期将是从foo()的条目到foo()的返回;因此每次调用都会将其重新初始化为5。关键字static的作用是将变量的生存期延长到程序的生存期;例如,初始化仅发生一次,然后该变量将在以后对foo()的所有调用中保留其值-无论它变为何种值。

梦里花落0921

输出: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;}

慕雪6442864

与具有以下程序相同:static int x = 5;void foo(){    x++;    printf("%d", x);}int main(){     foo();     foo();     return 0;}static关键字在该程序中所做的全部工作是(实际上)告诉编译器“嘿,我在这里有一个变量,我不希望其他人访问,也不告诉其他人它存在”。在方法内部,static关键字告诉编译器与上面相同,但是,“不要告诉任何人此函数存在于此函数之外,只能在此函数内部访问”。我希望这有帮助
打开App,查看更多内容
随时随地看视频慕课网APP