自动变量具有代码块作用域、空连接和自动存储时期。它们是局部的,为定义它们的代码块(通常是一个函数)所私有。寄存器变量与自动变量具有相同的属性,但编译器可能使用速度更快的内存或寄存器来存储它们。无法获取一个寄存器变量的地址。
具有静态存储时期的变量可能具有外部链接、内部链接或空连接。当变量在文件的所有函数之外声明时,它是一个具有文件作用域的外部变量,具有外部链接和静态存储时期。如果在这样的声明中再加上关键字static,将获得一个具有静态存储时期、文件作用域和内部链接的变量。如果在一个函数内使用关键字static声明变量,变量将具有静态存储时期、代码块作用域和空连接。
当程序执行到包含变量声明的代码时,给具有自动存储时期的变量分配内存,并在代码块结束时释放这部分内存。如果没有初始化,这样的变量具有一个无效值。在程序编译时给具有静态存储时期的变量分配内存,并且在程序运行时一直保持。如果没有初始化,这样的变量被设置为0。具有代码块作用域的变量局部于包含变量声明的代码块。
具有文件作用域的变量对文件中在它的声明之后的所有函数可见。如果一个文件作用域变量具有外部链接,则它可被程序中的其他文件使用。如果一个文件作用域变量具有内部链接,它只能在声明它的文件中使用。