怎么做
  1. 题面里的虚线方框就是要填的空
  2. 点候选项,它会填进当前高亮的那个空
  3. 点已填好的空,可以把选项取回来重选
  4. 全部填满后「提交」才会亮起
卡住了就点右下角的 👩‍🏫 问 AI 老师,她会给提示但不直接给答案。

static 局部变量只初始化一次

👁️ 22 人浏览 💬 0 人评论 ❤️ 添加收藏

函数里每次 +5,调用三次

第 1 次

第 2 次

第 3 次

auto a

static s

5

5

5

10

5

15

变量除了「在哪儿能用」(作用域),还有「活多久」(生存期)。定义时可以在前面加存储类别:

  • auto:函数里的普通变量默认就是它(int a; 等于 auto int a;)。每次调用函数时新建、重新赋初值,函数返回就销毁。
  • static:函数里的 static int s = 0; 只在第一次初始化,函数返回后也不销毁,下次调用接着用上次的值;没写初值时自动为 0。它仍然只能在这个函数里用。
  • register:建议编译器把变量放进寄存器(用法和 auto 一样,不能用 & 取地址)。
  • extern:声明「这个全局变量在别处定义」,让定义之前的代码、或别的源文件也能用它。
#include <stdio.h>

void f(void)
{
    int a = 0;            /* auto:每次调用重新创建、重新赋 0 */
    static int s = 0;     /* static:只在第一次赋 0 */
    a = a + 1;
    s = s + 1;
    printf("a=%d s=%d\n", a, s);
}

int main(void)
{
    f();
    f();
    f();
    return 0;
}

第 3 次调用打印的是 a=【0】 s=【1】。如果把 static int s = 0; 改成 static int s;,第 1 次调用打印的 s 是【2】。

请登录后作答。
去登录
👩‍🏫
AI
💬 题目评论
🔒 登录并作答后可看讨论