C语言变量
变量(variable)可以理解成一块内存区域,通过变量名,可以引用这块内存区域,获取里面存储的值。
变量名
标识符(identifier)命名有严格的规范。
- 只能由字母、数字和下划线(
_
)组成。 - 不能以数字开头。
- 长度不能超过63个字符。
- 不能使用关键字和保留字。
auto, break, case, char, const, continue, default, do, double,
else, enum, extern, float, for, goto, if, inline, int, long,
register, restrict, return, short, signed, sizeof, static, struct,
switch, typedef, union, unsigned, void, volatile, while
- 两个下划线开头 的变量名,以及一个 下划线 + 大写英文字母开头 的变量名,也是系统保留的,不能起。
变量声明
C 语言的变量,必须先声明后使用,如果一个变量没有声明,就直接使用,会报错。
声明变量时,必须把变量的类型告诉编译器。
int height; // 声明了变量 height,并且指定类型为 int(整数)。
变量赋值
C 语言会在变量声明时,就为它分配内存空间,但是不会清除内存里面原来的值。
这导致声明变量以后,变量会是一个随机的值,所以变量一定要赋值以后才能使用。
int num = 42;
num = 43;
int x = 1, y = 2; // 多个相同类型变量的赋值,可以写在同一行。
赋值表达式有返回值,等于等号右边的值。
int x;
printf("%i", x = 2); // 输出 2
C 语言有左值(left value)和右值(right value)的概念。
左值是可以放在赋值运算符左边的值,一般是变量;右值是可以放在赋值运算符右边的值,一般是具体的值。
变量作用域
作用域(scope)指的是变量生效的范围。
作用域分类
C 语言的变量作用域主要有两种:文件作用域(file scope)和块作用域(block scope)。
- 文件作用域(file scope)
在源码文件顶层声明的变量,从声明的位置到文件结束都有效。
- 块作用域(block scope)
由大括号({}
)组成的代码块,它形成一个单独的作用域。
凡是在块作用域里面声明的变量,只在当前代码块有效,代码块外部不可见。
int a = 12;
if (a == 12) {
int b = 99;
printf("%d %d
", a, b); // 12 99
}
printf("%d
", a); // 12
printf("%d
", b); // 出错,变量 b 是在if代码块里面声明的,所以对于大括号外面的代码,这个变量是不存在的。
作用域嵌套
代码块可以嵌套,内层代码块可以使用外层声明的变量,但外层不可以使用内层声明的变量。
如果内层的变量与外层同名,那么会在当前作用域 覆盖
外层变量。
{
int i = 10;
{
int i = 20;
printf("%d
", i); // 20
}
printf("%d
", i); // 10
}
参考 C 语言教程