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 语言教程

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » C语言变量