C 语言简介
C 是一种:
- 面向过程(Procedure-Oriented)
- 编译型(Compiled)
- 静态类型(Static Typed)
- 接近底层(Low-level)
- 高性能
的编程语言。
由 Dennis Ritchie 在贝尔实验室开发。
现代操作系统、数据库、嵌入式系统、大量编程语言(如 C++、Java、Go、Rust)都深受 C 影响。
1. Hello World
#include<stdio.h>intmain(){printf("Hello World\n");return0;}2. 变量与赋值
基本变量
intage=18;floatprice=9.9;chargrade='A';变量修改
intx=10;x=20;常量
constintMAX=100;3. 数据类型
数字类型
| 类型 | 说明 |
|---|---|
| int | 整数 |
| float | 单精度浮点 |
| double | 双精度浮点 |
| char | 字符 |
| long | 长整数 |
示例
inta=10;doublepi=3.14159;charc='H';4. 算数运算
inta=10;intb=3;printf("%d\n",a+b);// 加printf("%d\n",a-b);// 减printf("%d\n",a*b);// 乘printf("%d\n",a/b);// 除printf("%d\n",a%b);// 取余5. 逻辑运算
| 运算符 | 含义 |
|---|---|
| && | 与 |
| ! | 非 |
示例
intage=20;if(age>18&&age<30){printf("青年\n");}6. 比较运算
| 运算符 | 含义 |
|---|---|
| == | 等于 |
| != | 不等于 |
| > | 大于 |
| < | 小于 |
| >= | 大于等于 |
| <= | 小于等于 |
7. if 判断
intscore=85;if(score>=90){printf("优秀\n");}elseif(score>=60){printf("及格\n");}else{printf("不及格\n");}8. switch 分支
intday=2;switch(day){case1:printf("星期一");break;case2:printf("星期二");break;default:printf("未知");}9. for 循环
for(inti=0;i<5;i++){printf("%d\n",i);}10. while 循环
inti=0;while(i<5){printf("%d\n",i);i++;}11. 数组(C 的“列表”)
C 没有真正的 List。
通常用:
- 数组(Array)
- 链表(Linked List)
代替。
数组
intnums[5]={1,2,3,4,5};printf("%d\n",nums[0]);遍历数组
for(inti=0;i<5;i++){printf("%d\n",nums[i]);}12. 字符串
C 没有真正的字符串类型。
本质是:
charstr[]="hello";实际上是:
['h','e','l','l','o','\0']\0表示字符串结束。
13. 结构体(Struct)
C 没有 class。
通常使用 struct。
structPerson{charname[20];intage;};使用结构体
structPersonp;p.age=18;14. 函数
定义函数
intadd(inta,intb){returna+b;}调用函数
intresult=add(3,5);15. 指针(C 最核心特性)
6
指针是 C 最重要、最底层的概念。
地址
inta=10;printf("%p",&a);&a表示变量地址。
指针变量
int*p=&a;含义:
p 保存 a 的内存地址通过指针修改变量
*p=20;等于:
a=20;16. 指针为什么重要
因为:
- 数组
- 字符串
- 函数参数
- 动态内存
- 文件系统
- 操作系统
本质都依赖指针。
17. 动态内存 malloc/free
#include<stdlib.h>int*arr=malloc(5*sizeof(int));free(arr);含义
malloc: 在堆内存申请空间 free: 手动释放内存18. C 的“集合”和“Map”
C 标准库没有:
- Set
- Map
- Dictionary
通常需要:
- 自己实现
- 使用第三方库
常见替代方案
| 需求 | C中的实现 |
|---|---|
| List | 数组 / 链表 |
| Set | 哈希表 |
| Map | 哈希表 |
| Queue | 队列结构 |
| Tree | 二叉树 |
19. 文件操作
FILE*fp=fopen("test.txt","r");fclose(fp);20. 异常处理
C 没有:
try / catch常见方式
返回错误码
intdivide(inta,intb){if(b==0){return-1;}returna/b;}使用 errno
#include<errno.h>21. typedef(类型别名)
typedefunsignedlongulong;22. enum 枚举
enumColor{RED,GREEN,BLUE};23. 宏 define
#definePI3.14宏函数
#defineSQUARE(x)((x)*(x))24. 头文件
#include<stdio.h>作用:
导入函数声明类似:
- Java import
- Python import
25. C 的编译过程
6
.c源文件 ↓ 预处理 ↓ 编译 ↓ 汇编 ↓ 链接 ↓ 可执行文件26. GCC 编译
Linux/macOS
gcc main.c-oapp运行:
./appWindows(MinGW)
gcc main.c-oapp.exe27. C 最特殊的地方(重点)
① 指针
这是 C 的灵魂。
int*p;很多现代语言都把这个东西隐藏了。
② 手动内存管理
malloc()free()程序员自己管理内存。
优点:
- 极致性能
- 极致控制
缺点:
- 容易内存泄漏
- 容易崩溃
③ 非常接近硬件
C 可以:
- 操作内存
- 操作寄存器
- 操作CPU
- 写驱动
- 写操作系统
④ 没有真正的“高级特性”
C 没有:
- 类
- 泛型
- 反射
- GC垃圾回收
- async/await
因此:
简单 但底层28. C 与其它语言的关系
5
很多语言语法都来自 C:
| 语言 | 与 C 的关系 |
|---|---|
| C++ | C 的扩展 |
| Java | 模仿 C 语法 |
| Go | 简化版 C 风格 |
| Rust | 安全版 C |
| JavaScript | C 风格语法 |
29. 学习 C 最重要的几个概念
建议重点掌握:
- 指针
- 内存
- 数组
- 函数
- struct
- 编译过程
- malloc/free
30. 一句话总结
C 语言的本质:
“用最少的抽象, 直接控制计算机硬件。”它既是:
- 现代编程语言之父
也是:
- 操作系统世界的基础语言。