一、为什么要学 C 语言?C 语言核心优势

C 语言是经久不衰的底层编程语言,核心四大优势:
1.执行效率极高:贴近硬件,无多余运行时封装,运行速度远超高级语言;
2.可直接操作硬件:广泛用于驱动、单片机、操作系统内核开发;
3.资源开销极小:占用内存、CPU 资源少,适配嵌入式、小型设备;
4.跨平台 + 行业基础扎实:几乎所有平台都支持 C 编译,是 C++、Java、Go 等语言的底层基石,计算机专业必修。

二、C 语言完整学习路线

1)基本数据类型、表达式及运算符
2)标准输入输出函数(printf/scanf)
3程序流程控制:分支 if/switch、循环 for/while/do-while
3)函数封装与调用
4)一维 / 二维数组、字符数组
5)指针(C 语言重难点)
6)构造数据类型:结构体、共用体、枚举
7)内存管理、位运算
8)程序调试方法(排错、日志、断点调试)

三、学前必备:计算机底层执行原理

3.1 计算机五大硬件组成

计算机核心五部件:运算器、控制器、存储器、输入设备、输出设备
运算器 + 控制器 = CPU(GPU/NPU 为专用计算芯片)

  • 存储器分层(速度从快到慢、容量从小到大):寄存器 → Cache 高速缓存 → 内存 → 硬盘
    各存储设备特性对比
  • 寄存器:CPU 内置,读写速度最快,容量极小;
    Cache 高速缓存:CPU 配套缓存,缓解 CPU 与内存速度差;
  • 内存(RAM):程序运行载体,掉电丢失数据、容量适中、读写快、单价高;
  • 硬盘:永久存储文件程序,掉电数据保留、容量大、读写慢、单价低。

3.2 C 程序完整运行流程

1.源代码经过编译器编译,生成二进制可执行文件a.out,永久存放在硬盘;
2.手动运行程序时,操作系统通过总线将a.out整体加载到内存;
3.CPU 通过总线读取内存中的二进制指令,存入寄存器、Cache 完成运算处理。

3.3 计算机数据存储单位

计算机最小单位:bit(位),仅能存储 0/1;
基础存储单位:byte(字节),1 byte = 8 bit;
容量换算标准(二进制换算):
1KB = 1024 Byte
1MB = 1024 KB
1GB = 1024 MB
1TB = 1024 GB

四、基本数据类型

4.1 C 语言数据类型总分类

  1. 基本数据类型
    ◦ 整数类型 short/int/long
    ◦ 字符类型 char
    ◦ 浮点类型 float/double
    ◦ 空类型 void
  2. 构造数据类型:结构体、共用体、枚举、数组
  3. 指针类型:C 语言灵魂,万能地址操作
  4. 补充:C++ 独有布尔类型 bool(C 语言需引入头文件使用)

4.2 整数类型(有符号 / 无符号)

4.2.1 64 位 Ubuntu 系统整型尺寸与取值范围
1)short 短整型
内存中:2字节
unsigned short :无符号短整形
最大值:1111 1111 1111 1111 —》2^16-1=65535
最小值:0000 0000 0000 0000 —》0
short(signed short):有符号
最大值:0111 1111 1111 1111 --》2^15-1 = 32767
最小值:1000 0000 0000 0000 --》-32768
2)int 整形
内存中:4字节
unsigned int :无符号整形
最大值:1111 1111 1111 1111 1111 1111 1111 1111 --》2^32-1 42亿+
最小值:0000 0000 0000 0000 0000 0000 0000 0000 --》0
int(signed int):有符号短整型
最大值:0111 1111 1111 1111 1111 1111 1111 1111 --》2^31-1 21亿+
最小值:1000 0000 0000 0000 0000 0000 0000 0000 --》-2^31 -21亿
3)long
内存:8字节
unsigned long(int):无符号长整形
最大值:2^64-1
最小值:0
signed long(int):有符号长整型
最大值:2^63-1
最小值:-2^63
工具关键字:sizeof(变量/类型),用于获取数据类型占用内存字节数

printf("int = %ld", sizeof(int));

4.2.2 整型内存存储规则(补码机制)
无符号整型:内存直接存储原码,无符号位,全部位存数值;
有符号整型:最高位为符号位(0 = 正数,1 = 负数),剩余位存数据:
正数:原码直接存储;
负数:内存存储补码,补码计算公式:补码 = 反码 + 1
原码:符号位不变,数值位正常书写;
反码:符号位不变,数值位全部取反;
补码:反码 + 1,最终存入内存。
实操示例 1:signed short -100
原码:1 000 0000 0110 0100
反码:1 111 1111 1001 1011
补码:1 111 1111 1001 1100(内存真实存储值)
实操示例 2:signed short -2026
原码:1 000 0111 1110 1010
反码:1 111 1000 0001 0101
补码:1 111 1000 0001 0110 → 十六进制 0xF816

4.2.3 整型溢出规则
无符号整型溢出为循环取值:
最大值 + 1 → 变为当前类型最小值
最小值 - 1 → 变为当前类型最大值

4.3 字符类型 char

内存占用:1 字节,本质是特殊整型,依靠 ASCII 码映射字符与数字;

可存储内容:大小写字母、符号、数字字符、转义字符;
普通字符:‘a’、‘Z’、‘5’、‘#’;
转义字符:\n换行、\t制表符、\r回车、\0字符串结束符;
关键 ASCII 码对照:
‘0’ = 48;‘a’ = 97;‘A’ = 65;‘\0’ = 0;
char 分两类:
unsigned char:0 ~ 255(2⁸-1)
signed char:-128 ~ 127(-2⁷ ~ 2⁷-1)

4.4 浮点类型 float /double(小数存储)

遵循 IEEE 浮点存储标准,分为三段:符号位 + 指数位 + 尾数位

  1. float 单精度浮点数
    占用:4 字节;精度:6~8 位有效数字
    分段:1bit 符号位 + 8bit 指数位 + 23bit 尾数位
    指数偏移值:127,实际指数 = 偏移值 + 二进制科学计数幂次
    示例:6.25
    十进制转二进制:110.01 → 科学计数 1.1001 × 2²
    符号位:0(正数)
    指数位:127+2=129 → 10000001
    尾数位:小数点后1001,补 0 至 23 位
    完整内存二进制:0100 0000 1100 1000 0000 0000 0000 0000 → 十六进制0x40c80000

  2. double 双精度浮点数
    占用:8 字节
    精度:12~16 位有效数字
    分段:1bit 符号位 + 11bit 指数位 + 52bit 尾数位
    指数偏移值:1023
    示例:6.25
    科学计数:1.1001 × 2²
    指数:1023+2=1025 → 10000000001
    尾数补 0 至 52 位,最终十六进制0x4019000000000000
    ⚠️ 重要注意:浮点数存储存在精度损失,不能直接用==判断两个浮点数相等。

4.5 void 空类型(缺省类型)

无实际存储数值,两大使用场景:
1)函数:返回值 void 代表无返回值;形参 void 代表无传入参数;
2)万能指针:void *,可接收任意类型变量地址。

4.6 bool 布尔类型(C 语言拓展)
内存占用:1 字节
取值 true (1) /false (0)
使用前提:必须引入头文件 #include <stdbool.h>
作用:逻辑判断,用于分支、循环条件

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐