什么叫做自动变量?

在 C 语言中,"自动变量"(automatic variable)是指在函数或代码块内部定义的变量。这些变量的生命周期与其所在的作用域(scope)相关联,具体特点如下:

  1. 作用域:自动变量的作用域仅限于其定义的函数或代码块。当程序执行到该函数或代码块时,自动变量被创建;当程序离开该作用域时,自动变量被销毁。
  2. 存储类型:自动变量通常存储在栈(stack)中。每次进入函数时,栈会为这些变量分配空间,离开函数时,这些空间会被释放。
  3. 初始化:自动变量在定义时如果没有显式初始化,它们的值是未定义的(即“垃圾值”)。如果显式初始化,则在每次进入函数时都会重新初始化。
  4. 关键字:在 C 语言中,自动变量通常不需要使用特定的关键字来声明,因为默认情况下,函数内部的变量都是自动变量。可以使用 auto 关键字来明确表示,但在实际编程中,通常不需要这样做。

示例代码:

#include <stdio.h>

void exampleFunction() {
    int a; // 自动变量,未初始化,值未定义
    int b = 5; // 自动变量,显式初始化为 5

    printf("a: %d, b: %d\\\\n", a, b); // a 的值是未定义的,b 的值是 5
}

int main() {
    exampleFunction();
    return 0;
}

在这个例子中,a 是一个自动变量,但没有被初始化,因此它的值是未定义的;b 是一个自动变量,并且被初始化为 5。每次调用 exampleFunction 时,ab 都会被重新创建和初始化。


这里说得对吗: 将把x的最后6位设置为0。 注意, 表达式x & ~077与机器字长无关, 它比形式为x & 0177700 的表达式要好,同为后者假定x是16 位的数值。

当然是对的,0177700 转换到二进制本来是 18 位,但是,八进制的 1 转成二进制实际只有两位有效,也就是 001。