news 2026/4/23 20:13:03

C语言从入门到进阶——第2讲:C语言数据类型和变量

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言从入门到进阶——第2讲:C语言数据类型和变量

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位运算、计数器
long8(LP64)-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.4e38(6–7位有效数字)40.0f图形、科学计算(精度较低)
double8≈ ±1.8e308(15–16位有效数字)80.0浮点数默认首选
long double12/16平台相关(x86常见80位扩展精度)平台相关0.0L高精度计算(不跨平台)
_Bool10 或 110bool(stdbool.h)C99引入,逻辑值

最重要记忆口诀(2025–2026主流环境)

  • char → 1 字节
  • short → 2 字节
  • int → 4 字节
  • long long → 8 字节
  • float → 4 字节(单精度)
  • double → 8 字节(双精度,默认浮点字面量类型)

2. 变量声明与定义的写法对比

// 仅声明(告诉编译器有这个名字,后面会定义)externintglobal_count;// 定义并初始化(分配内存)inta=10;// 定义 + 初始化intb;// 定义(自动初始化为0 —— 全局/静态变量)staticintc=0;// 静态变量,文件作用域,初始化为0// 同时声明和定义(最常见)intmain(void){intx=42;// 局部变量,未初始化 → 随机值(未定义行为!)staticinty=100;// 静态局部变量,只初始化一次constintz=200;// 常量,必须初始化return0;}

最容易犯的错误 Top 5(新手必踩):

  1. 局部变量不初始化就使用 → 未定义行为(可能是随机值、崩溃)
  2. int a = 1, b = 2, c;写成一行,最后一个没初始化
  3. 误以为char c = 'A';占 1 字节,实际上字符串"A"占 2 字节(含\0
  4. 字面量默认类型没搞清楚:
    • 3.14→ double
    • 3.14f→ float
    • 10000000000→ int(溢出!)→ 必须写10000000000LL
  5. signed 和 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

经典溢出例子(面试/调试必考):

unsignedinta=0xFFFFFFFF;// 4294967295printf("%u\n",a+1);// 输出 0(无符号环绕)intb=0x7FFFFFFF;// 2147483647printf("%d\n",b+1);// 未定义行为(通常 -2147483648)

4. sizeof 与对齐(进阶必知)

#include<stdio.h>intmain(){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. 这一讲核心总结口诀(背下来)

  1. char 1、short 2、int 4、long long 8、double 8
  2. 局部变量不初始化 = 垃圾值,千万别直接用
  3. 字面量:整数默认int,浮点默认double,加后缀改变(f、LL、U)
  4. unsigned 溢出环绕,signed 溢出未定义行为
  5. sizeof 是运算符,不是函数;结果是 size_t(无符号)
  6. 现代C强烈建议用 <stdint.h> 的定宽类型:int32_t、uint64_t、int64_t 等

下一讲预告:常量、运算符、表达式、常见隐式转换陷阱、枚举与 typedef

有想重点深挖的部分吗?
比如:

  • float/double 在内存中的 IEEE 754 表示
  • signed → unsigned 转换的具体规则
  • 结构体/联合体/位域的对齐细节
  • 各种整数字面量写法导致的溢出案例

随时告诉我,我继续展开。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 9:54:56

降AI后会影响查重吗?2026年实测告诉你真相

降AI后会影响查重吗&#xff1f;2026年实测告诉你真相 很多同学在降AI前都会担心&#xff1a;处理后会不会增加重复率&#xff1f; 毕竟论文既要过AIGC检测&#xff0c;又要过查重&#xff0c;万一顾此失彼就麻烦了。 我专门做了实测&#xff0c;结论是&#xff1a;用对工具…

作者头像 李华
网站建设 2026/4/23 11:19:10

<span class=“js_title_inner“>Python:实例对象</span>

在 Python 中&#xff0c;实例对象&#xff08;instance&#xff09;并不是类的附属产物&#xff0c;而是与类对象并列的一等运行期实体。实例与类一样&#xff0c;都是在程序执行过程中被创建的对象&#xff0c;具备明确的身份、类型和值&#xff0c;并完全受统一的对象模型规…

作者头像 李华
网站建设 2026/4/23 9:55:06

含风电的两区域系统二次调频控制仿真研究

含风电的两区域系统二次调频控制仿真&#xff0c;AGC调频模型&#xff0c;一点一、引言随着可再生能源的快速发展&#xff0c;风力发电作为绿色能源的重要组成部分&#xff0c;已经广泛应用于电力系统中。然而&#xff0c;风力发电的间歇性和波动性给电力系统的稳定运行带来了挑…

作者头像 李华
网站建设 2026/4/23 11:20:39

从零到一:彻底搞懂 JavaScript 中的 CommonJS 规范

一杯咖啡的时间&#xff0c;带你穿透 Node.js 模块系统的灵魂 你是否曾面对这样的代码陷入沉思&#xff1a; const fs require(fs); module.exports class Logger { ... };为什么 Node.js 用 require 而非 import&#xff1f;exports 和 module.exports 到底有何玄机&#x…

作者头像 李华
网站建设 2026/4/23 11:21:25

深入浅出AQS(抽象队列同步器)

AQS是AbstractQueuedSynchronizer的简称&#xff0c;即抽象队列同步器&#xff0c;从字面上可以这样理解:抽象&#xff1a;抽象类&#xff0c;只实现一些主要逻辑&#xff0c;有些方法由子类实现&#xff1b;队列&#xff1a;使用先进先出&#xff08;FIFO&#xff09;的队列存…

作者头像 李华
网站建设 2026/4/23 11:20:34

【Java基础|Day04】Java数组详解:从定义到内存原理

【Java基础|Day04】Java数组详解&#xff1a;从定义到内存原理&#xff08;2026最新实用版&#xff09; Java数组是最基础、最常用的引用数据类型&#xff0c;几乎所有集合框架&#xff08;如ArrayList底层&#xff09;都依赖它。掌握数组 掌握了Java中连续内存 引用机制 堆…

作者头像 李华