2026/6/10 23:24:17
网站建设
项目流程
婚纱网站内容制作,直播营销策划方案范文,企业网站的设计,wordpress侧边栏淘宝客C语言从入门到进阶——第2讲#xff1a;C语言数据类型和变量
这一讲是C语言最基础但也最容易埋坑的部分。 数据类型决定了你能存什么、占多少内存、能表示的范围#xff0c;以及后续运算的规则。很多初学者在这一步没打好基础#xff0c;后面的指针、数组、函数传参、内存对…C语言从入门到进阶——第2讲C语言数据类型和变量这一讲是C语言最基础但也最容易埋坑的部分。数据类型决定了你能存什么、占多少内存、能表示的范围以及后续运算的规则。很多初学者在这一步没打好基础后面的指针、数组、函数传参、内存对齐等问题都会反复踩坑。1. C语言的基本数据类型一览2025–2026主流64位系统类型关键字常见字节数典型取值范围64位系统默认对齐默认值全局/静态变量常见包装/别名C99备注 / 最常用场景char1-128 ~ 127 或 0 ~ 25510—字符、字节、小整数signed char1-128 ~ 12710—明确要负数的小整数unsigned char10 ~ 25510uint8_t / byte字节流、网络数据、位操作short2-32,768 ~ 32,76720int16_t节省内存的整数较少单独用unsigned short20 ~ 65,53520uint16_t—int4-2,147,483,648 ~ 2,147,483,64740int32_t最常用整数类型unsigned int40 ~ 4,294,967,29540uint32_t位运算、计数器long8LP64-9.2e18 ~ 9.2e1880Llong int—unsigned long80 ~ 1.84e1980UL——long long8-9.2e18 ~ 9.2e1880LLint64_t大整数、时间戳、文件大小unsigned long long80 ~ 1.84e1980ULLuint64_t现代C最常用64位无符号整数float4≈ ±3.4e386–7位有效数字40.0f—图形、科学计算精度较低double8≈ ±1.8e30815–16位有效数字80.0—浮点数默认首选long double12/16平台相关x86常见80位扩展精度平台相关0.0L—高精度计算不跨平台_Bool10 或 110boolstdbool.hC99引入逻辑值最重要记忆口诀2025–2026主流环境char → 1 字节short → 2 字节int → 4 字节long long → 8 字节float → 4 字节单精度double → 8 字节双精度默认浮点字面量类型2. 变量声明与定义的写法对比// 仅声明告诉编译器有这个名字后面会定义externintglobal_count;// 定义并初始化分配内存inta10;// 定义 初始化intb;// 定义自动初始化为0 —— 全局/静态变量staticintc0;// 静态变量文件作用域初始化为0// 同时声明和定义最常见intmain(void){intx42;// 局部变量未初始化 → 随机值未定义行为staticinty100;// 静态局部变量只初始化一次constintz200;// 常量必须初始化return0;}最容易犯的错误 Top 5新手必踩局部变量不初始化就使用 → 未定义行为可能是随机值、崩溃把int a 1, b 2, c;写成一行最后一个没初始化误以为char c A;占 1 字节实际上字符串A占 2 字节含\0字面量默认类型没搞清楚3.14→ double3.14f→ float10000000000→ int溢出→ 必须写10000000000LLsigned 和 unsigned 混用导致隐式转换问题3. 类型转换与溢出最常考点隐式转换优先级从小到大char / signed char / unsigned char ↓ short / unsigned short ↓ int / unsigned int ↓ long / unsigned long ↓ long long / unsigned long long ↓ float → double → long double经典溢出例子面试/调试必考unsignedinta0xFFFFFFFF;// 4294967295printf(%u\n,a1);// 输出 0无符号环绕intb0x7FFFFFFF;// 2147483647printf(%d\n,b1);// 未定义行为通常 -21474836484. sizeof 与对齐进阶必知#includestdio.hintmain(){printf(char : %zu\n,sizeof(char));// 1printf(int : %zu\n,sizeof(int));// 4printf(double : %zu\n,sizeof(double));// 8printf(long long: %zu\n,sizeof(longlong));// 8structTest{chara;// 1intb;// 4但因为对齐前面补3字节doublec;// 8}t;printf(struct Test size: %zu\n,sizeof(t));// 通常 16对齐到最大成员double的8字节return0;}对齐规则快速记忆每个成员的起始地址 自身大小的整数倍整个结构体大小 最大成员对齐数的整数倍5. 这一讲核心总结口诀背下来char 1、short 2、int 4、long long 8、double 8局部变量不初始化 垃圾值千万别直接用字面量整数默认int浮点默认double加后缀改变f、LL、Uunsigned 溢出环绕signed 溢出未定义行为sizeof 是运算符不是函数结果是 size_t无符号现代C强烈建议用 stdint.h 的定宽类型int32_t、uint64_t、int64_t 等下一讲预告常量、运算符、表达式、常见隐式转换陷阱、枚举与 typedef有想重点深挖的部分吗比如float/double 在内存中的 IEEE 754 表示signed → unsigned 转换的具体规则结构体/联合体/位域的对齐细节各种整数字面量写法导致的溢出案例随时告诉我我继续展开。