在编程中,变量是程序中用于存储数据的容器(存储区),具有名称、类型和值,其数值是可变的。
在C语言中,变量在声明时必须指定数据类型,如"int","float"、"char"等,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中。
为了指定存储区域,要为每一个变量赋予唯一的名称,也称为标识符。标识符由字母、数字和下划线字符组成。它必须以字母或下划线开头。注意,在C语言中,对大小写比较敏感,大写字母和小写字母是不同的。
1.声明(创建)变量
声明变量就是告诉编译器在何处需要创建变量的存储,以及如何创建变量的存储。声明如下:
cpp
type VariableName = value;
其中,type指的是变量的类型,VariableName指变量名,value指对应的值。
如:
cpp
//定义一个整型变量
int num = 18;
//或者
int num1;
num1=20;
//定义一个浮点型变量
float pi=3.14;
//定义一个字符型变量
char MyCha='a';
//定义指针变量
int *ptr;
//定义多个变量
int i,j,k;
注:变量在创建时尽量初始化,若未初始化时,值可能为随机垃圾数据。对于全局变量或者静态变量,其默认初始值为:
- 整型变量(int、short、long等):默认值为0。
- 浮点型变量(float、double等):默认值为0.0。
- 字符型变量(char):默认值为'\0',即空字符。
- 指针变量:默认值为NULL,表示指针不指向任何有效的内存地址。
- 数组、结构体、联合等复合类型的变量:它们的元素或成员将按照相应的规则进行默认初始化。
但是局部变量不会自动初始化为默认值,所以在使用局部变量之前,应为其赋一个初始值。
2.全局变量和局部变量
(1)全局变量
- 定义在函数外部的变量,作用域整个工程。
- 默认初始化为0(整型)或0.0(浮点型),生命周期贯穿整个程序。
全局变量例子:此处的a定义在函数外。
cpp
#include <stdio.h>
int a = 20;
void func();
int main()
{
func();
printf("a的值为:%d\n", a);
return 0;
}
void func()
{
printf("a的值为:%d\n", a);
}

(2)局部变量
- 定义在函数或代码块内部的变量,作用域仅限于所在代码块。
- 未初始化时值为随机垃圾数据,生命周期随代码块结束而释放。
局部变量例子如下:此处的a在函数func()中定义,所以在main()函数中无法调用。
cpp
#include <stdio.h>
int main()
{
func();
printf("a的值为: %d", a);
return 0;
}
void func()
{
int a = 20;
printf("a的值为: %d", a);
}

3.常量
常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。
C语言中的常量分为以下以下几种:
- 字面常量
- const 修饰的常变量
- #define 定义的标识符常量
- 枚举常量
(1)常见的字面常量
如:
整数常量:可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。后缀可以是大写,也可以是小写。
如
cpp
213 /* 合法的 */
211u /* 合法的 */
0xCaaL /* 合法的 */
30ul /* 合法的 */
086 /* 非法的:8 不是八进制的数字 */
011UU /* 非法的:不能重复后缀 */
浮点常量:浮点常量由整数部分、小数点、小数部分和指数部分组成。
cpp
3.14159 /* 合法的 */
314159E-5L /* 合法的 */
510E /* 非法的:不完整的指数 */
float MYFLOAT= 3.14f;
字符常量:
字符常量是括在单引号中,例如,'x' 可以存储在 char 类型的简单变量中。
字符常量可以是一个普通的字符(例如 'x')、一个转义序列(例如 '\t')。
在C语言中,特定的转义字符如下:
| 转义序列 | 含义 |
|---|---|
| \\ | \ 字符 |
| \' | ' 字符 |
| \" | " 字符 |
| \? | ? 字符 |
| \a | 警报铃声 |
| \b | 退格键 |
| \f | 换页符 |
| \n | 换行符 |
| \r | 回车 |
| \t | 水平制表符 |
| \v | 垂直制表符 |
| \ooo | 一到三位的八进制数 |
| \xhh . . . | 一个或多个数字的十六进制数 |
字符串常量:
在C语言中,字符串通常括在双引号" "中。字符串常量在内存中以 null 终止符 \0 结尾。例如:
cpp
char myStr[] = "Hello, world!"; //系统对字符串常量自动加一个 '\0'
(2)定义常量
在C语言中,通常有两种方式定义常量:
- 使用#define预处理器:使用#define定义一个常量,它在编译时会被替换为对应的值。
- 使用const关键字:const关键字用于声明一个只读变量,该变量在使用过程中不能被修改。
cpp
#include <stdio.h>
#define PI 3.14
int main()
{
float radius = 5.0;
float area = PI * radius * radius;
printf("圆的面积为:%.2f\n", area);
return 0;
}

使用const定义常量时,必须在声明时就赋予值,后续不能修改。
cpp
#include <stdio.h>
#define PI 3.14
int main()
{
const float RADIUS;
RADIUS= 5.0; // 此处发生错误:不能修改常量变量
float area = PI * RADIUS* RADIUS;
printf("圆的面积为:%.5f\n", area);
return 0;
}
正确的为:
cpp
const float RADIUS=5.0;
#define和const的区别为:#define只是进行简单的文本替换,不进行类型检查,且没有作用域限制。const是声明一个具有类型的常量,其只在其定义所在的作用域内有效。
(3)枚举常量
枚举是C语言中的一种基本类型,用于定义一组具有离散值的常量。定义一个枚举类型需要使用enum关键字。
格式为:
cpp
num 枚举名 {枚举元素1,枚举元素2,......};
cpp
#include <stdio.h>
enum STATE
{
IDLE=1, RUNNING, ERROR
}state;
int main()
{
state = RUNNING;
printf("%d\n", state);
return 0;
}
