06-c语言数据类型及常量、变量
本文最后更新于 2026-02-26,文章内容可能已经过时。
C语言的数据类型包括基本类型(如int、float、char等)和派生类型(如数组、指针、结构体),用于定义数据的存储大小、值范围和操作;常量是值不可变的量,包括直接字面量(如123、'a')和符号常量(如#define PI 3.14或const int MAX=100);变量是值可变的量,需声明类型、遵循命名规则(字母/数字/下划线开头,避免关键字),具有作用域(全局、局部)和生命周期(如静态变量跨函数保持状态),是程序中动态存储和操作数据的核心元素。
一、C语言数据类型
C语言的数据类型可以分为以下几类:
1. 基本数据类型
| 类型 | 存储大小 | 值范围 | 说明 |
|---|---|---|---|
| char | 1字节 | -128 | 字符型 |
| unsigned char | 1字节 | 0~255 | 无符号字符 |
| signed char | 1字节 | -128~127 | 有符号字符 |
| int | 2或4字节 | -32768 | 整型 |
| unsigned int | 2或4字节 | 0 | 无符号整型 |
| short | 2字节 | -32768~32767 | 短整型 |
| unsigned short | 2字节 | 0~65535 | 无符号短整型 |
| long | 4字节 | -2147483648~2147483647 | 长整型 |
| unsigned long | 4字节 | 0~4294967295 | 无符号长整型 |
| long long | 8字节 | -9223372036854775808~9223372036854775807 | 长整型 |
| unsigned long long | 8字节 | 0~18446744073709551615 | 无符号长整型 |
| float | 4字节 | 约±3.4e±38,6位有效数字 | 单精度浮点型 |
| double | 8字节 | 约±1.7e±308,15位有效数字 | 双精度浮点型 |
| _Bool | 1字节 | 0(假)或1(真) | 布尔类型(C99引入) |
注意:各种类型的存储大小与系统位数有关,32位和64位系统有所不同。
2. 派生数据类型
- 数组类型:相同类型元素的集合
- 指针类型:存储内存地址的变量
- 结构体类型(struct):自定义的复合数据类型
- 共用体类型(union):同一内存位置可以存储不同类型的数据
- 枚举类型(enum):定义离散的整数值集合
- void类型:表示没有值的数据类型,通常用于函数返回值
二、常量
常量是程序执行过程中其值不发生改变的量。
1. 常量的分类
-
直接常量(字面量):
- 整型常量:12、0、-3
- 实型常量:4.6、-1.23
- 字符常量:'a'、'b'
- 字符串常量:"Hello, World!"
-
符号常量:
- 通过
#define预处理指令定义:#define PI 3.14159 - 通过
const关键字定义:const int MAX_SIZE = 100; - 习惯上符号常量的标识符用大写字母,变量名用小写字母
- 通过
2. 常量的特点
- 值不可改变
- 有确定的数据类型
- 通过唯一的标识符进行访问
- 不占内存(直接作为操作对象出现在寄存器中)
三、变量
变量是程序执行过程中其值可以改变的量。
1. 变量的定义
一般形式:类型说明符 变量名, 变量名, ...;
int a, b; // 声明两个整型变量
float x = 3.14; // 声明并初始化浮点变量
char c = 'A'; // 声明并初始化字符变量
2. 变量的命名规则
- 只能由字母(A
Z, az)、数字(0~9)、下划线(_)组成 - 第一个字符必须是字母或下划线
- 不能与C语言的关键字重名(如int、float、if等)
- 习惯上变量名用小写字母,符号常量用大写字母
3. 变量的分类
(1) 按存储位置划分
| 类型 | 存储区域 | 生命周期 | 初始化 | 适用场景 |
|---|---|---|---|---|
| 全局变量 | RAM(.data或.bss) | 程序全程 | 默认0(若未显式初始化) | 跨函数共享数据 |
| 静态变量 | RAM(.data或.bss) | 程序全程(静态全局)或函数调用间(静态局部) | 默认0 | 模块内部状态保持 |
| 局部变量 | 栈(Stack) | 函数执行期间 | 随机值(需显式初始化) | 临时计算、参数传递 |
| 寄存器变量 | CPU寄存器 | 函数执行期间 | 无保证 | 高频访问的临时变量 |
(2) 按修饰符划分
| 修饰符 | 作用 | 适用场景 |
|---|---|---|
| volatile | 禁止编译器优化,强制从内存读写 | 硬件寄存器、多线程/中断共享变量 |
| static | 限定作用域或延长生命周期 | 模块内私有变量、保持函数调用状态 |
| const | 定义只读变量 | 配置参数、查表数据 |
| extern | 声明外部定义的变量 | 多文件共享全局变量 |
4. 变量的特点
- 可变性:变量的值在程序运行时可以被改变
- 地址固定性:变量被分配内存空间后,其存储单元地址在程序运行期间是固定不变的
- 类型性:变量声明时必须指定数据类型
- 标识性:变量通过唯一的标识符(变量名)进行访问
四、常量与变量的区别
| 特性 | 常量 | 变量 |
|---|---|---|
| 值是否可变 | 不可变 | 可变 |
| 内存占用 | 不占内存(直接作为操作对象) | 需要分配内存空间 |
| 定义方式 | 直接量或通过#define/const定义 | 通过变量声明定义 |
| 作用域 | 与定义位置相关 | 与定义位置相关 |
| 初始化 | 不能重新赋值 | 可以重新赋值 |
五、示例代码
#include <stdio.h>
#define PI 3.14159 // 符号常量
int main() {
// 常量使用
const int MAX_SIZE = 100; // const常量
// 变量定义
int age = 25; // 整型变量
float height = 1.75; // 浮点型变量
char grade = 'A'; // 字符型变量
char name[] = "John"; // 字符串(字符数组)
// 全局变量示例
static int counter = 0; // 静态变量,生命周期为程序全程
// 局部变量示例
int localVar = 10;
printf("Age: %d, Height: %.2f, Grade: %c, Name: %s\n",
age, height, grade, name);
// 常量与变量的使用
float area = PI * height * height;
printf("Area: %.2f\n", area);
return 0;
}
六、C语言数据类型的特点
-
数据类型丰富:C语言支持整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等多种数据类型。
-
表达力强:C语言有丰富的数据结构和运算符,包含34种运算符,范围很宽,灵活使用各种运算符可以实现难度极大的运算。
-
直接访问硬件:C语言能直接访问硬件的物理地址,能进行位(bit)操作,兼有高级语言和低级语言的许多优点。
-
生成目标代码质量高:C语言描述问题比汇编语言迅速,工作量小、可读性好,易于调试、修改和移植,而代码质量与汇编语言相当(仅低10%~20%)。
-
可移植性好:C语言在不同机器上的C编译程序,86%的代码是公共的,所以C语言的编译程序便于移植。
通过理解C语言的数据类型、常量和变量,您可以更好地编写高效、可维护的C程序。
- 感谢你赐予我前进的力量

