KyrieChao

2026-08-18 周二 · typedef 与函数指针

2026-08-18

技术

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. 最后的疑问

我似乎不是在寻找普通意义上的爱情,而是寻找一种:

不欺骗自己、不把欲望包装成爱、不把占有误认为关心的关系。

但现实中的关系可能无法达到绝对纯粹。所以矛盾是:如果绝对纯粹的真爱可能不存在,那为什么还要进入一段关系?

这次思考的核心:爱是否必须纯粹,才能称为爱? 或者:真正成熟的爱,不是消灭欲望,而是在拥有欲望的时候,依然尊重对方作为一个人的存在。

明日计划

  1. C 语言:结构体(struct)、动态内存分配(malloc/free)、链表进阶
  2. Rust:恢复学习节奏