本文最后更新于 2026-02-26,文章内容可能已经过时。

C语言的数据类型包括基本类型(如int、float、char等)和派生类型(如数组、指针、结构体),用于定义数据的存储大小、值范围和操作;常量是值不可变的量,包括直接字面量(如123、'a')和符号常量(如#define PI 3.14或const int MAX=100);变量是值可变的量,需声明类型、遵循命名规则(字母/数字/下划线开头,避免关键字),具有作用域(全局、局部)和生命周期(如静态变量跨函数保持状态),是程序中动态存储和操作数据的核心元素。

一、C语言数据类型

C语言的数据类型可以分为以下几类:

1. 基本数据类型

类型存储大小值范围说明
char1字节-128127 或 0255字符型
unsigned char1字节0~255无符号字符
signed char1字节-128~127有符号字符
int2或4字节-3276832767 或 -21474836482147483647整型
unsigned int2或4字节065535 或 04294967295无符号整型
short2字节-32768~32767短整型
unsigned short2字节0~65535无符号短整型
long4字节-2147483648~2147483647长整型
unsigned long4字节0~4294967295无符号长整型
long long8字节-9223372036854775808~9223372036854775807长整型
unsigned long long8字节0~18446744073709551615无符号长整型
float4字节约±3.4e±38,6位有效数字单精度浮点型
double8字节约±1.7e±308,15位有效数字双精度浮点型
_Bool1字节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. 变量的命名规则

  • 只能由字母(AZ, 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语言数据类型的特点

  1. 数据类型丰富:C语言支持整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等多种数据类型。

  2. 表达力强:C语言有丰富的数据结构和运算符,包含34种运算符,范围很宽,灵活使用各种运算符可以实现难度极大的运算。

  3. 直接访问硬件:C语言能直接访问硬件的物理地址,能进行位(bit)操作,兼有高级语言和低级语言的许多优点。

  4. 生成目标代码质量高:C语言描述问题比汇编语言迅速,工作量小、可读性好,易于调试、修改和移植,而代码质量与汇编语言相当(仅低10%~20%)。

  5. 可移植性好:C语言在不同机器上的C编译程序,86%的代码是公共的,所以C语言的编译程序便于移植。

通过理解C语言的数据类型、常量和变量,您可以更好地编写高效、可维护的C程序。