0Pricing
C Academy · 课时

auto 与局部作用域

代码块级变量

auto 与局部作用域 是 CoddyKit 上的免费 C Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C Academy 课程共包含 4 节课。

什么是作用域

作用域是名称可见的代码区域。在 C 语言中,在代码块内声明的变量仅在该代码块内可见。

#include <stdio.h>
int main(void) {
    int x = 5;
    printf("x = %d\n", x);
    return 0;
}

auto 存储类

局部变量默认是 auto。由于每个块作用域变量都隐含使用它,因此很少需要写出这个关键字。

#include <stdio.h>
int main(void) {
    auto int n = 42;
    printf("n = %d\n", n);
    return 0;
}

块作用域

一对大括号会创建一个新的代码块。其中的变量会在代码块结束时消失。

#include <stdio.h>
int main(void) {
    {
        int inner = 10;
        printf("inner = %d\n", inner);
    }
    return 0;
}

自动生命周期

auto 变量在进入其代码块时创建,在退出代码块时销毁。这就是它的生命周期。

#include <stdio.h>
int main(void) {
    for (int i = 0; i < 2; i++) {
        int fresh = i * 10;
        printf("fresh = %d\n", fresh);
    }
    return 0;
}

名称遮蔽

内部变量可以用相同的名称遮蔽外部变量。在其代码块内,内部名称优先。

#include <stdio.h>
int main(void) {
    int x = 1;
    {
        int x = 99;
        printf("inner x = %d\n", x);
    }
    printf("outer x = %d\n", x);
    return 0;
}

函数参数也是局部的

参数同样是局部变量。它们只在函数运行期间存在。

#include <stdio.h>
int square(int n) {
    return n * n;
}
int main(void) {
    printf("%d\n", square(6));
    return 0;
}

未初始化的局部变量

auto 变量不会自动清零。在赋值前读取它会得到垃圾值。请始终进行初始化。

#include <stdio.h>
int main(void) {
    int x = 0;
    x = x + 5;
    printf("x = %d\n", x);
    return 0;
}

每次调用都有独立的局部变量

每次调用函数时,都会获得一份全新的局部变量副本。

#include <stdio.h>
void greet(void) {
    int count = 1;
    printf("count = %d\n", count);
}
int main(void) {
    greet();
    greet();
    return 0;
}

局部变量的优点

局部作用域可以限制变量的影响范围,避免程序不同部分之间发生意外干扰。

#include <stdio.h>
int main(void) {
    int a = 3;
    {
        int b = 4;
        printf("a + b = %d\n", a + b);
    }
    return 0;
}

嵌套代码块

代码块可以嵌套。内部代码块可以读取外部变量,但外部代码块无法读取内部变量。

#include <stdio.h>
int main(void) {
    int outer = 1;
    {
        int middle = 2;
        {
            int inner = 3;
            printf("%d\n", outer + middle + inner);
        }
    }
    return 0;
}

作用域与循环

在 for 头部声明的变量,其作用域仅限于该循环。

#include <stdio.h>
int main(void) {
    int sum = 0;
    for (int i = 1; i <= 4; i++)
        sum += i;
    printf("sum = %d\n", sum);
    return 0;
}

快速检查

请检验您对 auto 和局部作用域的理解。

回顾:auto 与局部作用域

您已经了解了局部变量的行为。

  • 块作用域变量默认是 auto
  • 它们的生命周期与代码块绑定
  • 内部名称可以遮蔽外部名称
  • 局部变量不会自动初始化
  • 每次函数调用都会获得全新的局部变量

常见问题解答

「auto 与局部作用域」课时是免费的吗?

是的 — 「auto 与局部作用域」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C Academy 课程的其余内容,请升级到 CoddyKit PRO。 C Academy 课程共包含 4 节课。

「auto 与局部作用域」这节课中我会学到什么?

代码块级变量 你通过在浏览器中直接运行的动手代码来练习 C Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 C Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 C Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「auto 与局部作用域」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 C Academy 课中编写并运行代码吗?

能。每节 C Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. auto 与局部作用域
  2. static 变量
  3. extern 与全局变量
  4. register 与 const
← 返回 C Academy