- 博客(43)
- 收藏
- 关注
原创 C语言字符串的“七十二变”:数组、指针、函数参数全解析
C语言的字符串和指针,就像一对"相爱相杀"的CP——指针给了字符串灵活的操作能力,但也暗藏"越界""修改常量区"等陷阱。记住这几个关键点:字符串必须有'\0'结尾,它是文字世界的"保安";指针指向字符串字面量时,千万别修改(会段错误);数组是"铁打的地址",指针是"灵活的箭头";动态内存要malloc+free,避免泄漏和野指针。关注微信公众号「芯动视界」,解锁代码世界的核心奥秘!获取更多资料!🔧深耕C语言精髓:从指针迷宫到内存管理,系统化讲解,助你夯实底层基础。⚡️探索嵌入式实战。
2025-07-29 07:00:00
1507
原创 C语言多维数组与指针:行地址怎么“跳”,列地址怎么“跑”?
1.数组名matrix ≠ 指针:matrix是编译器管理的标识符,不是内存中的指针变量2.数组名matrix 的类型到底是什么?上下文决定行为:在sizeof/&操作中:保留原始数组类型其他表达式:退化为int (*)[4]类型指针3.多维访问原理:第一步解引用:行指针→列指针第二步解引用:列指针→元素值关注微信公众号「芯动视界」,解锁代码世界的核心奥秘!获取更多资料!🔧深耕C语言精髓:从指针迷宫到内存管理,系统化讲解,助你夯实底层基础。⚡️探索嵌入式实战。
2025-07-27 07:30:00
590
原创 C语言实用干货:return 小哥的送货指南
想象一下,你(主函数 main)是公司的老板,手下有一群勤勤恳恳的员工(其他函数)。你给员工小张(函数 calculateSum)布置了个任务:“去,帮我算算1加到100等于多少!” 小张吭哧吭哧算完了,他怎么把结果告诉你呢?扯着嗓子喊?太不优雅了!这时,return 快递员闪亮登场!小张把计算结果(一个整数,比如5050)交给 return,return 立刻打包,瞬间传送回你的办公室(主函数的调用点)。你只需要说:瞧,return 完成了它的核心使命:把函数计算的结果安全、准确地送回到调用它的地方
2025-07-25 07:00:00
956
原创 数组和指针:C语言里的“连体婴”,你能分清谁是谁吗?
数组和指针就像相声里的"捧哏"和"逗哏",看似互怼,实则缺一不可。如果说数组是"固定房子",那么指针就是"万能钥匙"——数组名是系统给的钥匙(常量指针),而你可以自己造钥匙(指针变量)。最后送大家三句话:数组名是常量,系统分配之后不可变。指针变量是活的,可以指向不同的数组元素。传参时数组会变指针,长度一定要自己带。关注微信公众号「芯动视界」,解锁代码世界的核心奥秘!获取更多资料!🔧深耕C语言精髓:从指针迷宫到内存管理,系统化讲解,助你夯实底层基础。⚡️探索嵌入式实战。
2025-07-25 07:00:00
658
原创 C语言指针:让你又爱又恨的“指指点点”
想象一下,变量就像你家房子,而指针就是你家的门牌号。变量:存储数据(比如 int a = 10;,a 就是房子,里面住着 10)。指针:存储变量的内存地址(比如 int *p = &a;,p 就是门牌号,指向 a 的房子)。定义指针变量的基本形式:基类型 *指针变量名int a = 10;// 定义一个普通变量// 定义一个指针,指向a的地址&a:取 a 的地址(相当于问:“a 你家在哪儿?”)。int *p:声明 p 是一个指向 int 类型的指针。
2025-07-21 09:32:45
768
原创 CRC校验大全:一文掌握所有常用CRC算法
本文系统介绍了CRC循环冗余校验算法的实现原理及多种应用场景的代码实现。主要内容包括:1) CRC核心原理与5个关键参数说明;2) 从CRC-3到CRC-32的18种常用校验函数实现,涵盖ITU、USB、MODBUS等标准协议;3) 每种实现均标注多项式、初始值、位反转等关键参数,并说明典型应用场景如SD卡、RFID、工业控制等;4) 提供可直接嵌入项目的优化代码,包含位操作和字节流两种实现方式。文章配有详细注释的代码示例,如CRC-16 MODBUS帧校验实现,方便开发者快速移植应用。
2025-07-19 08:00:00
1521
原创 C语言三剑客:普通函数、内联函数与函数式宏定义的终极对决
C语言里的函数式宏,堪称「参数接收界的「万能选手」」——它能像普通函数一样「吃」参数,但偏偏「不挑食」也不「验身份」!打个比方,普通函数像「定制餐厅」:你点什么菜(传什么类型参数),厨房就按菜单(函数声明)准备食材(生成对应类型代码)。比如你要「int版max」,厨房就做份「int原料」的max菜;你要「double版」,就得单点一份「double原料」的——这叫「类型检查」,安全但麻烦。
2025-07-18 08:00:00
906
原创 C语言的‘快充‘技巧:内联函数
简单来说,内联函数就是让编译器把函数代码直接"粘贴"到调用的地方,省去了函数调用的开销。普通函数调用时,CPU要干一堆事:保存现场、跳转、执行、返回……而内联函数就像你妈喊你全名的时候,直接就知道要挨打了,省去了"思考"的时间!内联函数是优化小函数的神器,但别滥用!短小精悍的函数才适合内联,否则会"代码爆炸"💥头文件里用 static inline,避免链接错误调试时可以先禁用内联,方便排查问题关注微信公众号「芯动视界」,解锁代码世界的核心奥秘!获取更多资料!🔧深耕C语言精髓。
2025-07-17 08:00:00
712
原创 C语言实用干货:一文讲透CRC校验码
循环冗余校验是一种用于校验通信链路上数字传输准确性的计算方法(通过某种数学运算来建立数据位和校验位的约定关系的 )。发送方计算机使用某公式计算出被传送数据所含信息的一个值,并将此值 附在被传送数据后,接收方计算机则对同一数据进行 相同的计算,应该得到相同的结果。如果这两个 CRC结果不一致,则说明发送中出现了差错,接收方计算机可要求发送方计算机重新发送该数据。这里需要知道几个组成部分或者说计算概念:多项式公式、多项式简记式、数据宽度、初始值、结果异或值、输入值反转、输出值反转、参数模型。
2025-07-16 08:00:00
1616
原创 C语言实用干货:一文讲透C语言地址和指针
:取地址符,相当于"查住户门牌号";*:解引用符,相当于"按门牌号找住户";指针变量p:存的是地址(门牌号),但通过*p可以操作该地址里的数据(住户)。学完今天的内容,你应该明白:地址是内存中每个变量的"门牌号",用&获取;指针是存地址的"小本本",用*解引用可以操作对应内存的数据;指针的类型决定了它"读写内存"的方式(步长、数据解析方式);安全使用指针的关键:初始化、类型匹配、边界检查、避免野指针。
2025-07-15 08:00:00
1457
原创 C语言开发者必备:这4个神奇函数让你的代码效率翻倍!
无论你是初无论你是初探嵌入式的新手,还是寻求进阶的老兵,这里都有你需要的硬核干货与技术洞见。一起用代码“芯”动视界!:从指针迷宫到内存管理,系统化讲解,助你夯实底层基础。:剖析项目案例,分享避坑指南,让开发效率翻倍。技术原理。
2025-07-12 10:00:00
384
原创 C语言宏定义完全指南:从入门到高阶技巧
指令作用描述#define定义宏(常量宏或函数宏)#undef取消已定义的宏#ifdef检查宏是否已定义#ifndef检查宏是否未定义(常用于头文件保护)#if根据条件决定是否编译代码#else条件编译的else分支#elif条件编译的else if分支#endif结束条件编译块#include文件包含(<>用于系统头文件,""用于自定义头文件)#error强制产生编译错误#pragma编译器特定指令(如#pragma once)
2025-07-11 10:00:00
1229
原创 C语言开发必备:这些神奇的宏定义让你的代码飞起来!
在C语言开发中,巧妙使用宏定义可以大幅提升代码效率和可读性。今天我们就来盘点那些让老司机们爱不释手的实用宏定义技巧!
2025-07-11 10:00:00
580
原创 C语言宏定义:从“#define“小白到宏操作老司机
"这行代码就像给3.1415926这个数字办了张名叫PI的身份证,编译器看到PI就会自动换成那一串数字。注意:它真的只是简单替换,不会帮你做数学题!关注微信公众号「芯动视界」,解锁代码世界的核心奥秘!获取更多资料!🔧深耕C语言精髓:从指针迷宫到内存管理,系统化讲解,助你夯实底层基础。⚡️探索嵌入式实战:剖析项目案例,分享避坑指南,让开发效率翻倍。无论你是初无论你是初探嵌入式的新手,还是寻求进阶的老兵,这里都有你需要的硬核干货与技术洞见。一起用代码“芯”动视界!
2025-07-09 10:00:00
800
原创 C语言函数参数:数组怎么传?为啥传着传着就秃了?
数组的函参之旅,本质是指针的游戏。理解了“传地址”这个核心,很多坑就能避开。1.只想看,不想改?派元素小兵 (arr[i]) 传值(副本)去!(只读场景安全)或者派全家去但要带 const 护身符 (const int arr[])。2.想要真修改?派全家出动 (arr),传地址!威风凛凛。必带保镖 size (数组长度)!没它?函数出门就掉坑(越界)。3.多维数组列数地图 (cols) 必须传!而且是函数定义里白纸黑字写清楚(如 int arr[][cols])。
2025-07-08 10:00:00
1008
原创 C语言内存管理:malloc/free的甜蜜陷阱
C语言给了你直接操作内存的权力,就像给了你一把锋利的双刃剑。用得好,你可以写出极致高效的程序;用不好,它会反过来伤害你。记住:内存泄漏就像忘记关水龙头——开始时微不足道,最终会淹没一切野指针就像未爆的炸弹——你不知道它什么时候会炸,但炸的时候一定很惨终极内存管理清单:分配后立即检查NULL每个malloc都有对应的freefree后立即置NULL避免在循环中无节制分配不要返回局部变量的指针关注微信公众号「芯动视界」,解锁代码世界的核心奥秘!获取更多资料!🔧深耕C语言精髓。
2025-07-07 10:00:00
1540
原创 C语言实用干货:深入解剖C指针传参的“黑客行为“
指针参数是C语言最具威力的特性之一,它打破了函数间的隔离墙,让我们直接操作内存数据。当你拿起指针这把"双刃剑"时:始终保持警惕(空指针、野指针)明确指针指向(解引用前确认有效性)掌握指针参数,你将成为真正能"隔空取物"的C语言魔法师!下次当你需要修改外部变量时,自信地拿出&和*,让值传递的枷锁成为历史!关注微信公众号「芯动视界」,解锁代码世界的核心奥秘!获取更多资料!🔧深耕C语言精髓:从指针迷宫到内存管理,系统化讲解,助你夯实底层基础。⚡️探索嵌入式实战。
2025-07-06 12:39:00
1405
原创 C语言函数三体:参数、返回值与调用的黑暗森林法则
编译器“死脑筋”: 它从上往下阅读代码。如果你在 main 里调用了一个函数 cookDinner(),但编译器的目光还没扫描到 cookDinner 的定义在哪,它就慌了!“何物???”报错 undeclared identifier。解决方案 (二选一):方案A - 小吃摊集中开在美食城门口(前置声明): 在调用之前(通常在文件顶部或头文件里)告诉编译器:“嘿!等下有个 void cookDinner(int menuId);的摊子会来,它长这样(返回值类型、函数名、参数类型)”。
2025-07-03 10:00:00
854
原创 C语言字符串函数:从入门到“入坑“再到“爬坑“指南
C语言没有真正的字符串类型,而是用字符数组 + '\0'(空字符)表示字符串。于是,<string.h> 提供了一群"文字魔法师"(字符串函数),帮我们操作这些脆弱的字符数组。
2025-07-02 10:00:00
1039
原创 C语言实用干货:深度解剖字符数组
/ 能住10个字符的"宿舍楼"这个"宿舍楼"有10个"房间"(元素),编号从0到9(C语言从0开始数数,程序员的第一课就是学会从0开始数数)。务必指定大小: 房子(内存空间)不提前规划好,队伍(字符)就住不进去或者乱占地盘(内存溢出)!内存是连续的: 字符数组在内存中是一个挨一个的格子间。str[0]是首字母,"邻居"是str[1],以此类推。大小限制是硬道理: char my_word[6];最多放5个可见字符+1个神秘终结者(后面讲)。想放"HelloWorld"?
2025-07-01 10:00:00
1289
原创 C语言二维数组:你以为它是表格?其实它是“俄罗斯套娃“!
数据类型 数组名[行数][列数];// 国际象棋棋盘// 一年12个月,每月31天的温度二维数组就像生活中的表格——课程表、Excel、棋盘游戏...掌握它,你就掌握了用代码描述复杂世界的重要工具!下次见到矩阵运算、图像处理(本质就是超大二维数组),你就能会心一笑了。课后测试:猜猜输出什么?答案在评论区找!关注微信公众号「芯动视界」,解锁代码世界的核心奥秘!获取更多资料!🔧 深耕C语言精髓:从指针迷宫到内存管理,系统化讲解,助你夯实底层基础。
2025-06-30 10:00:00
823
原创 C语言一维数组:从“单身公寓“到“集体宿舍“
数据类型 数组名[数组长度];// 能住10个整数的公寓// 20个浮点数的小区// 50个字符的字母楼int arr[5];这里的 [5] 是在定义数组,告诉编译器:给我一个能放5个整数的储物柜。这里的 [2] 是在引用(访问) 数组第3个元素(索引为2),给它赋值99。这里是在引用数组第2个元素(索引为1),把它的值取出来赋给变量x。定义: int scores[5];索引(下标): 0 1 2 3 4访问:scores[0] = 90;// x 现在等于 85。
2025-06-29 14:32:22
1133
原创 C语言“逃跑三兄弟“:break、continue、return的越狱计划
break、continue和return这三个"逃跑专家"各有绝活:break是"越狱专家"——直接结束循环/switchcontinue是"放风逃兵"——跳过本次循环return是"刑满释放"——结束整个函数越狱知识小测验:1.下面代码会输出什么?i<5;i++)2.如何在switch语句中跳过某个case?3.函数没有返回值时,return语句可以带返回值吗?关注微信公众号「芯动视界」,解锁代码世界的核心奥秘!获取更多资料!
2025-06-25 10:00:00
920
原创 C语言循环三兄弟:for、while、do-while谁才是循环界的扛把子?
特点:知道循环次数时使用,结构清晰,适合遍历数组、固定次数的操作。for (初始化;条件;更新)// 循环体行为艺术:第一步(开场白): 执行初始化语句(通常定义并初始化一个循环变量,如int i = 0;只执行一次!第二步(灵魂拷问): 检查循环条件(例如i < 10)。如果条件为真(非零),进入第三步;如果为假(零),直接出门右转(结束循环)。第三步(干活): 执行{}里的循环体代码。第四步(自我更新): 执行更新语句(通常让循环变量前进一步,如i++)。
2025-06-24 21:44:29
1286
原创 C语言for循环:程序员修(折)行(腾)之路,佛祖都看哭了!
程序员小张:“佛祖,我写for循环总是死循环,怎么办?佛祖:“放下键盘,立地成佛。小张:“可项目明天上线啊!佛祖:“……那你还是看看这篇文章吧。
2025-06-24 20:45:36
1357
原创 C语言实用干货:深入解析do-while循环
当do-while遇到宏定义时容易出现问题:错误定义:do// 不管条件成不成立,先执行一次!// (哪怕世界末日,我也要先跑一遍!} while (条件);// 注意这个分号!漏了编译器会骂人!正确写法:do// 不管条件成不成立,先执行一次!// (哪怕世界末日,我也要先跑一遍!} while (条件);// 注意这个分号!漏了编译器会骂人!为什么这样写:保证宏展开后是一个完整语句避免if-else语句中的悬挂else问题。
2025-06-21 10:55:51
1179
原创 C语言实用干货:while循环深度解剖--从入门到“入土“的硬核指南
人生就像while循环,只要条件满足,就继续前进;但别忘了适时break,否则会陷入死循环。”最好的程序不会无限运行,最好的人生也不是永远重复。—— 学会在适当的时候break,才是真正的编程智慧 & 人生智慧 💡希望这篇深度解析能让你彻底掌握while循环!如果有问题,欢迎留言讨论~ 🚀关注微信公众号「芯动视界」,解锁代码世界的核心奥秘!获取更多资料!🔧深耕C语言精髓:从指针迷宫到内存管理,系统化讲解,助你夯实底层基础。⚡️探索嵌入式实战:剖析项目案例,分享避坑指南,让开发效率翻倍。
2025-06-08 10:37:57
918
原创 C语言实用干货:switch语句是代码优化神器还是bug制造机?
多分支离散值(如菜单选择) ✅ switchcase 值连续密集 ✅ switch(可能优化)范围判断(如 x > 10) ❌ if-else浮点数/字符串比较 ❌ if-elsecase 值稀疏 ⚠️ 测试性能再决定。
2025-06-06 21:35:19
1276
原创 C语言实用干货:三目运算符--比if更骚,但用不好会翻车!
三目运算符(?:)是C语言中的一种简洁条件表达式,能大幅减少代码行数,提升编写效率。它像代码界的"瑞士军刀"——小巧锋利,但用不好容易伤到自己。✅ 何时用?简单条件赋值(如 max = a > b?a : b;单行返回值(如 return error?-1 : 0;嵌入式开发(节省ROM空间)❌ 何时慎用?嵌套超过一层(可读性骤降)涉及复杂副作用(如 i++)💡 黄金法则如果三目运算符能让代码更清晰,大胆用;如果会让同事皱眉,赶紧换 if-else!(你平时喜欢用三目运算符吗?
2025-06-04 22:03:56
1471
原创 C语言实用干货:if语句太长了?用表驱动法把if-else if拖出去斩了!
"如果你写的if-else if超过一屏,要么是你该升职了(因为代码复杂),要么是你该被开除了(因为代码太烂)!而表驱动法,能让你保住饭碗的同时,还能早点下班!
2025-06-03 22:03:10
1166
原创 C语言实用干货:if语句的硬核解剖
本文以幽默风格讲解C语言中if语句的使用技巧与常见陷阱。文章详细介绍了if语句的三种基本形式(单if、if-else、if-elseif-else)及其应用场景,并指出条件表达式在C语言中的特殊布尔逻辑判定方式。重点剖析了四大经典陷阱:赋值与比较混淆、浮点数精度问题、else悬空问题和运算符优先级问题,给出具体避坑建议。最后展示了三目运算符、switch替代、函数封装等进阶优化技巧,强调代码可读性的重要性。
2025-06-02 16:33:15
771
原创 C语言实用干货:深入理解运算符优先级,告别“意料之外”的Bug!
《C语言运算符优先级详解》 摘要:C语言运算符优先级规定了表达式中各运算符的执行顺序,优先级高的先计算,同级则按结合性处理。优先级金字塔从高到低依次为:括号/成员访问、逻辑非/自增、乘除、加减、移位、关系、相等、位运算、逻辑、三目、赋值和逗号运算符。常见陷阱包括混淆赋值与比较、位运算优先级错误等。优化建议:多用括号明确意图,拆分复杂表达式,利用优先级优化逻辑判断,在可读性与效率间取得平衡。掌握优先级规则有助于编写正确高效的代码,核心原则是优先使用括号、警惕位运算、慎用自增减操作。
2025-06-02 11:43:11
1084
原创 C语言实用干货:其他运算符详解与避坑指南
条件运算符:适合简单的条件赋值,可替代简单if-else,但嵌套过深会降低可读性逗号运算符:在for循环初始化/更新和多表达式求值场景下很有用,但要区分与参数分隔符的区别sizeof运算符:获取类型或对象大小时必不可少,尤其要注意指针与数组的区别合理运用这些运算符可以让代码更简洁高效,但也要注意避免滥用导致的可读性问题。在实际开发中,应根据团队编码规范和具体场景选择最合适的写法。希望这篇干货能帮助你在C语言编程中更加得心应手!如果有任何问题或补充,欢迎在评论区留言讨论。
2025-06-02 11:36:46
900
原创 C语言实用干货:从底层视角彻底理解a++与++a
a++和++a的战争,本质上是程序员与编译器、硬件之间的三方博弈。当你写a++时:你正在命令编译器生成临时变量,暗示"我需要旧值"。当你写++a时:你在对CPU说"立即行动,别回头"。记住以下终极原则:1.在单线程、禁用优化的场景中,优先用++a2.在复杂表达式中彻底避开自增操作(如func(a++, ++a)是自杀行为)3.避免在同一个表达式里多次修改同一个变量最终,真正的"干货"不是记住语法差异,而是理解从硅片到代码的完整因果链。
2025-06-02 11:28:02
3166
原创 C语言实用干货:位运算符深度解析与实战技巧
位运算符如同C语言中的"手术刀",精准、高效,但需要开发者对二进制有深刻理解。通过本文,我们掌握了位运算的核心技巧:从掩码操作到硬件控制,从性能优化到数据加密;也牢记了避坑要点:警惕移位越界、注意符号位传播、多用括号明确优先级。最后送大家一句口诀:"位运算虽强,可不要贪杯!" 在嵌入式、算法优化等场景中大胆使用它,但在普通业务代码中,可读性优先才是王道。现在就打开你的IDE,用位运算重构一段旧代码吧——感受二进制操控的乐趣!下次我们将探讨C语言中另一个有趣的主题,敬请期待!互动环节:尝试用a ^= b。
2025-06-02 11:18:10
1005
原创 C语言实用干货:赋值运算符
"="是代码世界的“承诺”,但左边必须是变量,不能是常量或表达式。a++和++a的区别:前置先增再使用,后置先用再增(自信值confidence++先输出再涨)。复合赋值(+=/-=)让代码更简洁,比如wallet -= 520;(情人节专属心痛操作)。希望这篇文章能帮助你在C语言编程之路上走得更稳更远!如果你觉得有用,欢迎分享给更多学习C语言的朋友。我们下期再见!互动环节:你在使用赋值运算符时遇到过哪些有趣的问题?欢迎在评论区留言分享你的经历!关注微信公众号「芯动视界」,解锁代码世界的核心奥秘!
2025-06-02 11:05:28
1311
原创 C语言实用干货:逻辑运算符“与或非”哲学
在C语言的世界里,每个优秀的程序员,都是手持逻辑三叉戟的现代哲人,用&&铸造秩序,用||开辟可能,用!挑战陈规——这,就是数字文明的创世之道!当你再次写下if(condition)时,愿你能:✓ 在&&中看见万物互联的精密✓ 在||中领悟柳暗花明的智慧✓ 在!中参透否极泰来的轮回互动环节:你在使用逻辑运算符时遇到过哪些有趣的问题?欢迎在评论区留言分享你的经历!关注微信公众号「芯动视界」,解锁代码世界的核心奥秘!🔧深耕C语言精髓:从指针迷宫到内存管理,系统化讲解,助你夯实底层基础。⚡️。
2025-06-02 11:00:18
2413
原创 C语言实用干货:关系运算符
✓ 重要的不是运算符本身,而是比较后的行动✓ 浮点数的比较如同感情,需要包容误差✓ 正确的优先级,才能得到期望的结果✓ 分清赋值(=)和相等比较(==)✓ 多个条件判断要使用逻辑运算符连接✓ 字符串比较要使用专门的函数关注微信公众号「芯动视界」,解锁代码世界的核心奥秘!🔧深耕C语言精髓:从指针迷宫到内存管理,系统化讲解,助你夯实底层基础。⚡️探索嵌入式实战:剖析项目案例,分享避坑指南,让开发效率翻倍。。
2025-06-02 10:50:42
355
原创 C语言实用干货:算术运算符
在C语言的世界里,四则运算就像是一把双刃剑——用得好,它能帮你解决各种数学问题;用不好,它能帮你制造各种调试夜晚。类型决定命运:整数除法会截断,浮点运算要小心精度括号是护身符:不确定优先级?加括号保平安边界检查不能忘:溢出和除零是程序员的噩梦浮点比较要谨慎:永远不要直接用==比较浮点数。
2025-06-02 10:42:46
448
原创 C语言实用干货:当#define遇上const,谁才是真爱?
在C语言的世界里,#define和const就像“螺丝刀”和“扳手”——一个能暴力撬开问题,一个精准解决问题。当你需要预处理魔法:让#define冲在前线,但记得给它戴上括号镣铐!当你追求安全可控:让const坐镇后方,编译器会为你立起护盾。常量定义看似简单,实则体现了程序员对语言特性的理解深度。从#define到const的转变,反映了C语言从简单文本处理到完善类型系统的发展历程。在实际工程中,我们应该根据具体需求选择合适的常量定义方式,写出既安全又高效的代码。
2025-06-02 10:35:07
922
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅