目录一、本节学习内容概要图二、前言三、变量是什么3.1 基本类型及内存大小四、变量定义语法五、变量初始化与赋值5.1 局部变量未初始化问题5.2 安全初始化六、变量在内存中的存储与地址6.1 地址打印形式区别七、sizeof 操作符八、栈空间与变量生命周期九、总结一、本节学习内容概要图二、前言在 C 编程中变量是最基础也是最关键的概念。本文将系统介绍变量的定义、初始化、赋值以及变量在内存中的表现和地址管理帮助初学者快速理解变量与内存的关系为后续动态内存和指针学习打下基础。三、变量是什么变量Variable是有名字的内存对象在程序运行时占用一定内存空间用于存储和修改数据。一个变量具有三个核心属性内存大小变量在内存中占用的字节数值类型变量存储的数据类型变量名用于程序访问的标识符变量 名字 类型 内存空间3.1 基本类型及内存大小C 常见基础类型包括类型内存大小bool1 字节char1 字节int4 字节long long8 字节float4 字节double8 字节⚠️ 注意bool 类型 1 字节 8 位数值范围-128 — 127最高位符号位int 类型 4 字节 32 位最大值 -2³¹ ≈ -2147483648最大值 2³¹-1 ≈ 2147483647数量级约 2G表示可表示的最大整数数量级不是内存大小四、变量定义语法C 提供了多种变量定义方法其中统一初始化语法是推荐方式int x{100}; // 声明 int 类型变量 x并初始化为 100新语法会自动检查类型避免隐式转换不建议使用int x{1,3}会报错传统赋值语法也可用x 100; // 修改变量内存中的值五、变量初始化与赋值5.1 局部变量未初始化问题int x; // 声明但未初始化仅在栈上分配 4 字节空间但值不确定栈空间可能存放之前程序的残留数据使用未初始化变量会产生潜在 bug新版本编译器会发出警告或错误提醒“使用了未初始化的局部变量”旧版本编译器可能不会报错。5.2 安全初始化int x{0}; // 初始化为 0 x 100; // 赋值修改变量值初始化确保变量有确定值赋值修改内存中存储的值六、变量在内存中的存储与地址每个变量在内存中都有地址可用取地址符获取int x{100}; int z{200}; cout 变量 x 的值: x endl; cout 变量 x 的内存地址: x endl; cout 变量 z 的内存地址: (long long)z endl;int x{100} x(long long) x;6.1 地址打印形式区别表达式类型/效果输出形式xint* 指针类型默认十六进制指针(long long)x将地址转整数十进制整数原因cout对指针类型默认使用十六进制输出强制类型转换为整数后cout 默认以十进制显示地址本身未变化七、sizeof 操作符sizeof可获取变量或类型在内存中占用字节数int x{100}; cout int x 内存大小: sizeof(x) 字节 endl; long long bigint{0}; cout long long bigint 内存大小: sizeof(bigint) 字节 endl;输出示例int x 内存大小: 4 long long bigint 内存大小: 8注意sizeof不是函数而是编译时运算符。八、栈空间与变量生命周期局部变量在栈空间分配栈空间随函数调用分配函数结束释放未初始化变量可能出现残留值现象栈空间变量地址可能被新变量复用示意图变量在栈中的分布高地址 --------------------- long long bigint --------------------- int z --------------------- int x --------------------- 低地址对于动态内存堆空间变量地址不连续可通过new或malloc分配。九、总结变量是内存中有名字的对象可修改、可访问初始化重要避免使用未定义值sizeof可获取变量占用内存大小栈变量地址可通过获取强制转换可改变打印形式新编译器能提醒未初始化变量旧编译器可能无法识别后续可学习动态内存与堆空间理解指针与对象生命周期