2026-08-18 周二 · typedef 与函数指针
技术
C 语言
学习内容:typedef 与函数指针
typedef 关键字
typedef(type definition,类型定义)给已有类型起别名,意义是让类型名更有意义、更简短,提升可读性。语法 typedef 原类型 新类型名;,实际项目中类型声明通常写在头文件。
- 一行可声明多个别名:
typedef unsigned long price, *money;中price是unsigned long,money是unsigned long* - 常配合指针类型使用:
typedef unsigned long* data;
函数与指针
返回值可以是指针类型,但不能返回指向非静态局部变量的指针——函数返回后该变量已释放,会得到悬空指针(dangling pointer)。要返回就返回仍存活的对象:静态局部变量、全局变量、实参地址、malloc 内存。
形参可以是指针类型:传大数组/结构体时只传地址,效率高。君哥建议——只读不写时把形参定义为常量指针(const),误写会被编译器直接拦下。
函数指针(function pointer):函数也占内存(代码段),其首字节地址就是入口地址。函数名本身就是函数指针。
- 定义:
double(*pf)(double, double);(*pf)括号不能省,否则变成"返回double*的函数" - 调用:
pf2(8, 3)与max(8, 3)等效 - 类型声明后更简洁:
typedef double(*fun_t)(double, double);,可定义变量/常量/数组 - 函数指针数组:
fun_t fs[] = {sum, max, sub};,fs[1](5, 6)即max(5, 6)
字符型指针(char*)
两个用途:① 表示某字符的地址;② 表示一个字符串(用首字符指针代表,字符连续存储、末尾 '\0')。
char s1[] = "ab12"是数组(数组名是常量),不能s1 = "...";char* s2 = "ab12"是指针变量,可以改指向- 字符串字面量存在常量区,用
char*指向后不应修改其内容,否则是未定义行为 - 段错误(Segmentation fault):内存非法访问(访问已释放内存、改只读区、野指针解引用)
链表练习(test2.c)
今日练习用结构体和 malloc/free 实现了两类链表,并验证各操作:
| 操作 | 单向链表(不循环) | 循环链表(头结点自环) |
|---|---|---|
| 创建 | link_create(next=NULL) |
clink_create(next=head) |
| 头插 / 尾插 | insert_head / insert_tail |
cinsert_head / cinsert_tail |
| 打印 | print_link(到 NULL) |
cprint_link(回到 head) |
| 反转 | link_reverse |
creverse_link |
| 查找 | link_find |
cfind_link |
| 删除 | link_delete |
cdelete_link |
| 销毁 | link_destroy |
cdestroy_link |
Rust
无。
思考
爱与欲:两个状态的冲突
今天思考了"爱而无欲,欲而无爱"这个命题。
我的理解不是普通意义上的"爱情包含爱和欲两个部分",而是:
爱是一种状态,欲也是一种状态。
两者不是程度不同,而是本质不同。
1. 爱是一种纯粹的状态
我理解的爱,不是"我想得到你",而是:
我关注的是你这个人的存在。
真正爱一个人的时候,不应该带有目的性。如果我爱一个人,却希望她幸福,即使最后陪伴她的人不是我,那这种爱似乎更接近爱的本质——因为这里没有占有、没有索取。爱的时候,就只是爱,类似进入一种心流状态:不计算得失、不考虑回报、不分析价值、不想着自己正在爱,只是单纯地存在于这种状态里。
2. 欲是一种环境和基因的表达
欲望更像是:
基因 + 环境 + 经验共同产生的反应。
它来自人的生物本能,关注的是"我想获得什么"——可能是身体吸引、陪伴、关注、占有、满足自己的需求。因此欲望本身并不等于爱,因为欲望的方向更多是自己。
3. 真爱是否存在?
我的观点:真正完全纯粹、不带任何欲望、不受环境和本能影响的爱,也许不存在。现实中的人是复杂的,感情受生理机制、社会环境、个人经历、过去记忆影响。所以"永恒的真爱"可能是一种理想状态。
但这不代表爱不存在,可能只是:
永恒纯粹的爱不存在,而某一刻真实发生的爱存在。
就像心流无法永久保持,但心流状态本身是真实存在的。
4. 我的矛盾:为什么无法想象爱和欲同时面对一个人?
我发现自己无法想象两个场景:用纯粹的爱面对喜欢的人,和带着欲望面对喜欢的人。我感觉无法同时对一个人表达这两个方面。
因为在理解里,爱意味着"你是一个独立的人",欲望意味着"我想从你那里获得某些东西"。爱更接近"你是你",欲更接近"我想要你"。
所以冲突产生了:如果我真的爱一个人,我怎么还能对她产生欲望?如果产生欲望,我是不是已经不再爱她,而只是在满足自己?
5. 进一步的问题
可能真正的问题不是"有没有欲望",而是:
当欲望出现的时候,我是否仍然把对方当作一个完整的人。
如果欲望意味着占有、把对方当工具,那它和爱冲突;但如果欲望只是想靠近、想连接、想表达亲密,那它可能不一定破坏爱。
6. 最后的疑问
我似乎不是在寻找普通意义上的爱情,而是寻找一种:
不欺骗自己、不把欲望包装成爱、不把占有误认为关心的关系。
但现实中的关系可能无法达到绝对纯粹。所以矛盾是:如果绝对纯粹的真爱可能不存在,那为什么还要进入一段关系?
这次思考的核心:爱是否必须纯粹,才能称为爱? 或者:真正成熟的爱,不是消灭欲望,而是在拥有欲望的时候,依然尊重对方作为一个人的存在。
明日计划
- C 语言:结构体(struct)、动态内存分配(malloc/free)、链表进阶
- Rust:恢复学习节奏