第1周:C 语言系统编程强化
目标:掌握系统级 C 编程的核心技术,为后续网络编程打下坚实基础。
1. 指针高级用法
1.1 函数指针
函数指针指向代码段中的函数入口地址,是 C 语言实现回调、动态调度的基础。
1 |
|
典型应用场景:
| 场景 | 示例 |
|---|---|
| 排序比较函数 | qsort 的 comparator |
| 信号处理 | signal(SIGINT, handler) |
| 线程入口 | pthread_create 的 start_routine |
| 回调注册 | epoll 事件回调、定时器回调 |
1.2 多级指针
1 |
|
1.3 指针与数组的等价与差异
1 |
|
核心要点:
- 大多数情况下
arr和&arr[0]值相同,但类型不同 sizeof(arr)在函数参数中会失效(数组退化为指针)- 数组名不能被赋值,指针可以
2. 动态内存管理
2.1 malloc / calloc / realloc / free 详解
1 |
|
2.2 内存对齐
1 |
|
对齐规则:
- 每个成员按自身对齐要求放置(通常是其大小的幂次)
- struct 整体大小按最大成员对齐
#pragma pack或__attribute__((packed))可修改,但可能影响性能
2.3 字节序(Endianness)
1 |
|
网络字节序规则:
- 网络传输统一使用 大端序(Big Endian,Network Byte Order)
- 主机可能是大端或小端,发送前转
hton*,接收后转ntoh* h= host,n= network,s= short (16bit),l= long (32bit)
2.4 位运算实战
1 |
|
2.5 字节流缓冲区实现
1 | // buffer.h |
1 | // buffer.c |
1 | // buffer_test.c |
3. 系统调用错误处理
3.1 错误处理宏封装
1 | // syscall_wrapper.h |
1 | // syscall_demo.c |
3.2 Valgrind 内存检测
1 | # 编译时加调试信息 |
1 | // valgrind_demo.c |
1 | $ valgrind --leak-check=full ./valgrind_demo |
3.3 实践:字节流缓冲区完整测试
1 | // buffer_advanced.c |
- 本文作者: CoderSong
- 本文链接: https://jack-song-gif.github.io/2026/08/05/第1周:C 语言系统编程强化/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!