507 字
1 分钟
【C】变量常量与数据类型
2026-05-19
C

变量定义#

int num = 1; // 类型 变量名 初值(可选)

局部变量#

  • 定义在函数(或块)内部
  • 若未初始化,其值不确定(自动存储期),使用前必须赋值
  • 离开作用域后失效

全局 / 静态变量#

  • 定义在函数外,或使用 static 修饰的局部变量
  • 未显式初始化时,数值类型默认为 0,指针默认为 NULL
  • 生命周期为整个程序运行期间

就近原则#

编译器解析同名标识符时,优先选用最近作用域中的定义。局部变量与全局变量同名时,在局部作用域内局部变量会屏蔽全局变量。

int x = 10;
void foo(void) {
int x = 20;
printf("%d\n", x); // 20
}

常量#

字面量常量#

  • 整型:420xFF
  • 实型:3.141.0e-2
  • 字符:'A'
  • 字符串:"hello"(类型为 char[]char*

符号常量#

#define MAX 100 // 预处理宏,文本替换
const int MAX_VAL = 100; // const 变量,有类型检查
  • #define 在预处理阶段替换,无类型检查
  • const 由编译器处理,更安全,推荐用于只读变量

进制转换#

二进制转八进制、十六进制时,从低位向高位分组:

  • 3 位二进制 → 1 位八进制
  • 4 位二进制 → 1 位十六进制

示例:1101 1010₂ = 332₈ = DA₁₆

有符号整数与取值范围#

补码示意(以 4 位为例)#

  • 共 2⁴ 个编码;最高位为符号位,可表示负数
  • 可表示范围约为 -2ⁿ⁻¹ ~ 2ⁿ⁻¹ - 1(n 为位数)

无符号溢出#

  • 无符号数超出位数能表示的范围时,高位被丢弃,数值按模 2ⁿ 回绕
  • 例:4 位无符号 1111(15) + 1 → 0000(0)

基本数据类型与格式符#

类型典型字节数(依平台而定)printf 格式符说明
char1%d%c字符;%hhd 打印为整数时
unsigned char1%u / %hhu
short2%hd
unsigned short2%hu
int4%d
unsigned int4%u
long4 或 8%ld依平台
unsigned long4 或 8%lu
long long8%lldC99
unsigned long long8%llu
float4%fprintf%f 可用于 float(会提升)
double8%f%lfprintf 推荐 %fscanfdouble%lf
long double8~16%Lf依平台

说明longlong double 的字节数依赖编译器与 ABI,移植时需用 sizeof 确认。

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

【C】变量常量与数据类型
https://lysj.work/posts/studynotes/c/c变量常量与数据类型/
作者
Sekiro
发布于
2026-05-19
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录