<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>2020s on TouchingFish.top</title><link>https://touchingfish.top/2020/</link><description>Recent content in 2020s on TouchingFish.top</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Fri, 25 Dec 2020 00:00:00 +0000</lastBuildDate><atom:link href="https://touchingfish.top/2020/index.xml" rel="self" type="application/rss+xml"/><item><title>年末综合征（New Year's Eve Reaction）</title><link>https://touchingfish.top/2020/symptoms-at-the-end-of-the-year/</link><pubDate>Fri, 25 Dec 2020 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2020/symptoms-at-the-end-of-the-year/</guid><description>&lt;p&gt;从15年开始，一到年末，状态就很消沉。很Sad的一天，又是一年一度的研究生考试，可是又不知道我们为什么去考？太想做的事情往往会事与愿违。&lt;/p&gt;
&lt;p&gt;有些人以为自己擅长在年末总结得失，却难免关注于影响最大的几件事情，或者被近况所局限。&lt;/p&gt;
&lt;p&gt;一年下来，虽然不能坚持每天完成日记，但也算记录了完整的心路历程。&lt;/p&gt;
&lt;p&gt;今天是圣诞节，刚好回家一年了。没有完成任何社会化。据不完全统计，失眠的天数约为365天。&lt;/p&gt;
&lt;p&gt;我学会了如何阅读，或者说，如何学习。年初立下的二十本书的阅读计划，也因为最后七十天的备考，看教科书和辅导书实现了。如果不是疫情，我也不知道自己会多看还是少看几本。从寒假开始，刻意关注自己的意志，寻找快乐和目标。借着居家的时期，完成心理的修炼，以找到人格的能源，并在之后的经历中再三确认。&lt;/p&gt;
&lt;p&gt;春暖花开时节，出发探索自己的道路，渐渐被一些志同道合的“前辈”吸引。虽然他们偶尔分享的经验也像在夸夸其谈，是我早已摸索出的办法，但和组织有序的团队相比，确实感觉到资源的匮乏和能力的不足。羡慕那些单枪匹马的孤胆英雄，能成为这种人也依赖于过硬的实力。做完第一个视频后，认识到自己还需要更多的沉淀。当然，也可能有对原创和首创的过于执着，才要求我做更多的训练。也许这是我对「去完成一个PhD」那么向往的原因吧。&lt;/p&gt;
&lt;p&gt;转而继续有意识地投入于学习中。如今想来，今年完成的第一件事是最正确的选择。很庆幸把“学会如何学习”放在了第一位。曾经也自认为是个自学小能手，但是很少理清和理出一套合适自己的方法论。这贯穿了整年的学习经验。到年末逐渐感受到，可能是因为涉猎广泛又浅尝辄止，导致思维太过跳跃而缺乏逻辑，需要时刻提醒自己加强逻辑训练。&lt;/p&gt;
&lt;p&gt;今年印象最深的也包括选秀节目吧。不只是娱乐节目的表面，也让我看到了各种类型的职业所面临的遭遇。人们不被理解才是常态，总觉得别人不理解自己的辛酸，我们其实也很难共情别人的不幸。求学之路难走得多，因为它伴随着令人不适的意识形态，需要学会高举轻放。一年里，不知道是自己有意无意地多看了一眼高校的新闻，还是确实「世态炎凉」。层出不穷的热搜一直激化内心的矛盾。早上看了基德对这些事件的评论，最大的感受就像近日常在心里念叨的“道理都懂，却过不好这一生”。当一件痛苦的事情能够被共情，这种痛苦早已经比它本身深刻得多。&lt;/p&gt;
&lt;p&gt;幸运和不幸作为一对反义词，从程度上讲，不幸却沉重许多。有时候，恰恰是我们的运气好坏造成了最大的不幸。&lt;/p&gt;
&lt;p&gt;为了有更多时间思考关于自我的问题，早已经关闭朋友圈一个季度了。更没有通过什么途径了解大家的近况，聊天窗口经常是停在星期几，或几月几日（而不是确切的时间和几天前）。虽然一直有发些无关紧要的动态，但从来不关心回复，只是在给那些还记得我的友人们报平安。读圣经，最重要的启示发在了年中的朋友圈里，那也是苟延残喘的救命之索。&lt;/p&gt;</description></item><item><title>再来一次吗？重新出发前的夏日</title><link>https://touchingfish.top/2020/mid-summer-festival/</link><pubDate>Fri, 16 Oct 2020 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2020/mid-summer-festival/</guid><description>&lt;p&gt;南方的夏日长得感人。我曾经在去年的中秋节开玩笑：“这哪里是 Mid-Autumn Festival，完全就是 Mid-Summer Festival 吧。”&lt;/p&gt;
&lt;h2 id="20200716"&gt;2020.07.16&lt;/h2&gt;
&lt;p&gt;这两天鼻炎好像又来搞我了，有一个明显的症状是起床的时候，感觉鼻甲非常脆弱，一受刺激就要开始发作了，所以常刷牙洗脸都要小心翼翼。也许是惩罚我前天把喷雾摔到了地上，现在用起来都觉得有点小小毛病。于是今天在鼻炎中度过。流鼻涕，流鼻涕。我也怀疑是感冒，但感冒康复起来没这么随便吧，总之这两年我也分不清自己什么时候感冒，什么时候鼻炎了。&lt;/p&gt;
&lt;p&gt;下午看了一会儿 C 语言八股文。做点事情，症状有所好转。晚上洗完澡之后就更好些了，特别是喝了奶茶以后——&lt;/p&gt;
&lt;p&gt;八点多自己在家的时候，挺想叫个外卖，喝杯奶茶，忍住了（可能是懒的到店取餐？）。没想到妈妈回家的时候也问要不要喝杯奶茶。我想她不知道喝奶茶其实很容易失眠，这莫名其妙成了一种流行病。不过感觉妈妈真的很包容我，很关照我。&lt;/p&gt;
&lt;p&gt;某蓝绿色求职app收到了一个消息，真正意义上被我“吸引”的一位老板，名字起得也是很有气质，跟我喜欢的男性声乐艺人LYJ同音。分享了一下前段时间做的科普视频，刚刚才看到回复，印象还不错吧。希望有机会见个面，投机的话可以一起做些有趣的事情。虽然是以学习的心态在找工作，但探索也是一种学习，和我这些年玩得还可以的“自学”一样，全靠自己摸索。&lt;/p&gt;
&lt;h2 id="20200717"&gt;2020.07.17&lt;/h2&gt;
&lt;p&gt;晚饭后，犹豫了一下决定去跑步。抠门的我想到骑行卡还有次数没用完，不想浪费。一路小跑，居然不带喘地跑到了海滨路，几个红灯也很给面子，不给暂停的机会。小步跑的话，体力已经能够跟上了。休息了一会儿，继续跑了一公里也是没有拉胯。看来底子还是不错的，才坚持锻炼了三四次，耐力恢复得很快。&lt;/p&gt;
&lt;p&gt;看《想见你》的时候，给她画了时间轴解释剧情，自己理解剧情可能不是问题，表达清楚到让别人也理解，是有点难度的（起码我还得下点功夫）。&lt;/p&gt;
&lt;h2 id="20200721"&gt;2020.07.21&lt;/h2&gt;
&lt;p&gt;因为熊浩和辩论，去到一个有意思的公司，认识了一个有意思的人。如果互相欣赏，能够一起合作一段时间也是蛮好。&lt;/p&gt;
&lt;p&gt;事与愿违，对他们来说可能只是跟一个没经历过社会毒打的普通毕业生聊了一下，对我来说却是——&lt;/p&gt;
&lt;p&gt;我只是一个想要认真生活的普通人，普通到觉得每个月有点固定收入也改变不了现状，普通到就算时间倒转十年一百次也可能没办法成功地实现自己的理想。&lt;/p&gt;
&lt;h2 id="20200923"&gt;2020.09.23&lt;/h2&gt;
&lt;p&gt;以前说要保持写日记的习惯，实际上每天写也并不简单，总是因为各种奇奇怪怪的原因（懒？）而停下。晚上读了二三月的日记，记录了不少思想的变化，对构建自我认知和确定目标规划的帮助还是挺大的，所以好习惯应该得到保持。&lt;/p&gt;
&lt;p&gt;一觉睡到了中午，把昨天缺少的睡眠补得有点过头。“行为决定态度”，希望能够把作息改过来。&lt;/p&gt;
&lt;p&gt;和老同桌去打球。前段时间怎么没想着这个点出来打球就没人呢？哦，太热了吧。有种包场的感觉，不过投篮养生一小时也有一点累。实际上是参加了一个场下吐槽的活动。二十几岁还能跳得动，真不简单。回家洗澡吃饭后开始头疼，一入夜（十一点半）人突然就好了。看了我真的是暗属性，夜间生产效率 max。&lt;/p&gt;
&lt;p&gt;原来妈妈做个家教都有 3000 多工资，我这种菜鸡本科生也太难了。接了一份兼职，马上我也要做点新工作了。&lt;/p&gt;
&lt;p&gt;其实，早意识到自己有个小毛病，有时候对陌生的工作，包括第一次做的实验，总会害怕出错，显得自己笨手笨脚。嗐，明明学习和实践一下我能做得比大多数好。不过前两天有个不同的想法：或许别人并不会因为这种小事把你划入“不行”的群体。欣赏一个人既要全面，更要看到他最闪光的地方，也许正是最不可替代的。所以，我之前是把别人想得心胸狭窄了？&lt;/p&gt;
&lt;h2 id="20200928"&gt;2020.09.28&lt;/h2&gt;
&lt;p&gt;《新工作》&lt;/p&gt;
&lt;p&gt;好感一：同事和领导都挺好。虽然现在还不是很了解，但能包容我这种生无可恋的上班状态已经让我很感恩了。&lt;/p&gt;
&lt;p&gt;好感二：禁烟场所，我可太喜欢了。保温杯泡枸杞，上班养生。&lt;/p&gt;
&lt;p&gt;好感三，工作内容简单，基本不会出错。虽然划水三天了，还是有些细节不太了解。额，也没人给我交代得很清楚啊，大概我也不需要知道太清楚吧。&lt;/p&gt;
&lt;p&gt;好感四：亲情，爱情，友情。有陪父母来看电影的年轻人，跟他们沟通最高效，也很理解和配合。带孩子来观影的家长们，大概和孩子相处多了，都比较可爱。交往约会的男男女女，一般会在服务工作人员面前表现得更加友善来博取异性的好感吧。结对或成群的好友，年龄段不限，“老朋友”一起来电影真是令人羡慕。&lt;/p&gt;
&lt;p&gt;好感五：昨天处理了一只粘鼠板上的老鼠，当年实验课对勇气的锻炼效果仿佛派上了用场。&lt;/p&gt;
&lt;h2 id="20200930"&gt;2020.09.30&lt;/h2&gt;
&lt;p&gt;习惯性丢伞。&lt;/p&gt;
&lt;p&gt;一辈子不知道要犯几次同样的错误。&lt;/p&gt;
&lt;p&gt;凌晨四点半，跑到马路上确认刚刚那辆共享单车还在不在。&lt;/p&gt;
&lt;p&gt;不会再有下一把了。&lt;/p&gt;
&lt;h2 id="20200930-1"&gt;2020.09.30&lt;/h2&gt;
&lt;p&gt;泉州是我的第二故乡。当我在泉州时，想念家乡的亲人和朋友，回忆孩童的天真。当我在家乡时，牵挂泉州的师长和同窗，怀念大学的青春。&lt;/p&gt;
&lt;p&gt;去年的中秋，还记得特别清楚。当时我已经没住在学校，那天中午，汕大课题组的友人还叫我一起去玩。天气很热，我写了“Mid-Summer Festival”的烂梗。昨天晚上，看着师兄师姐，还有两位姐妹似乎牢骚的文字，便猜想组会他又是一次正常发挥。我“逃”了，没有和大家一起面对。&lt;/p&gt;
&lt;p&gt;七十周年阅兵时，我对象牙塔外的世界并没有想太多。我选择了逆行真气，自断经脉。以为是 gap，没想到一年的人生 debug 就这样过去了。&lt;/p&gt;
&lt;p&gt;在海边散步时，收到了蒋老师的问候：“今年的考研会报名吗？”。嗯——&lt;/p&gt;
&lt;p&gt;做了重新开始的决定后，积累还远远不够，却渐渐感到了来自卷王们的“压迫感”。幸运的是，身上还保留了一丝理想主义者的心气。在这个年代也不知道是可贵还是可怜了。时常思考有什么一辈子非做不可的事情吗？双节又至，即使武功尽失，也想要再闯江湖。&lt;/p&gt;
&lt;h2 id="20201004"&gt;2020.10.04&lt;/h2&gt;
&lt;p&gt;继《新工作》——&lt;/p&gt;
&lt;p&gt;场务的同事有两个。&lt;/p&gt;
&lt;p&gt;早班的是一位女生。看起来知书达礼，应该还在上学。下班换掉工作服后，穿着打扮也很有自己的风格。工作可以说是认真负责，检票登记时，对每位客人都能假装测一下体温。不过偶尔犯点小迷糊，左右不分，说话也稍欠逻辑。最明显的优点和缺点都是特别勤劳。&lt;/p&gt;
&lt;p&gt;说实话，能有一个眼里都是活儿的同事一起合作会轻松很多，但相对而言，显得我有一丝懒惰。散场需要打扫卫生，好几次她都成功地在我之前到厅里收拾。倒不是在意别人的眼光，作为一个有绅士包袱的男生，让共事的女同志做清理的工作，内心难免有些惭愧，同时再次对她的勤劳表示欣赏。&lt;/p&gt;
&lt;p&gt;晚班的哥们儿，一言难尽。对男生来说，初次见面还是不容易尴尬的，不过注意到了他的牙结石，应该是个抽烟的人。大概率没判断错，有一次在他身边闻到一点残留的烟草味。观察他谈吐和做事的方式，断定他接受的教育水平不高。用老李的话讲，看起来是个不懂高等数学的人。&lt;/p&gt;
&lt;p&gt;具体来看，有好几个典型骚操作。口罩卖光了，不及时问同事和补货，就让客人自己去前台问。保洁的阿姨上班之前，必要的卫生工作从不完成，散场不打扫，垃圾桶满了也无视，问就是拖到保洁阿姨来做。不是眼里看不到活儿，提醒他也不起作用，工作态度甚至比我懒散。说来应该是毫无责任感和服务意识，完全不考虑这段时间产生的垃圾丢在哪里。检票时倒像个无情的销售机器，开口永远只有一句话术——“你们有带口罩吗”，捆绑销售，无情逼单，在一定程度上影响了顾客的观影心情。我个人感觉更为重要的疫情进出登记，他当然是能省则省。哦，看来不只不懂高数。&lt;/p&gt;</description></item><item><title>高高举起，轻轻放下</title><link>https://touchingfish.top/2020/raise-high-and-lower-gently/</link><pubDate>Fri, 16 Oct 2020 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2020/raise-high-and-lower-gently/</guid><description>&lt;p&gt;最近的两则“绝笔”新闻挺震撼的。&lt;/p&gt;
&lt;p&gt;“来世作猫”的朋友，写得很让人共情。这样的文字，在我的日记里大概也能精炼出几千字——对现状表现出微笑的绝望，却不敢对未来有一点浮想。&lt;/p&gt;
&lt;p&gt;相似的人太多了。就像我去年考上研究生的时候，虽然并不认为是件值得一提的事情，至少解决了一个短期规划的问题——围绕着新的学生生活展开。&lt;/p&gt;
&lt;p&gt;我得恩师赏识，有志于科研，这使我和大多数人考研初衷不同。当时我对未来还有期待。&lt;/p&gt;
&lt;p&gt;做“第一个大学生”是很难的。家里有些亲戚会把你的升学当成“光宗耀祖”的事情一样。大概在他们影响下，我也有点膈应。这也许是促成最后退学的一个隐藏原因。&lt;/p&gt;
&lt;p&gt;今天不聊学校的事情，只说家人的“眼光”。做决定时，我也想了很多，但跟其他人交流得很少。我预想到，越多人的建议，越会影响我做自己的判断。我算逃避吗？也许退学这件事还不算，但在一些人眼中有点胡作非为是肯定的。真正让我承认逃避的，是那一年没有坚持去重考。&lt;/p&gt;
&lt;p&gt;原因一是我的期待变高了，我意识到短时间内很难做到力争上游；再是确实自我效能低下，除了伴随而来的难度增加，对重蹈覆辙的恐惧也使我畏缩不前；还有对亲眼所见的一些事实真相感到失望和无力——从此所有期待都化为乌有。&lt;/p&gt;
&lt;p&gt;后来，我选择了普普通通的生活，其实是开始一种新的探索。新事物对我而言有一种奇怪的吸引力。直到今年开春时，我还在普通中寻找答案。早在两年前，我就已经“万念俱灰”过了，如果有相同的体验，会感觉这四个字其实很贴切。&lt;/p&gt;
&lt;p&gt;我一直不知道自己是为什么活着。细想来，花花世界并没有我真正留恋的。当时是学习和阅读拯救了我，独处的宁静换来内心的平和。在看 Tal 的课程时，我做了 V.I.A 的测试——我的人格力量来源于学习（排第一）。从此给了我一些心理暗示。回想过去的一些经历，包括不久后在圣经里看到“那个世界没有知识”，我告诉自己：也许离开之前我想多了解一些知识，不管是学习别人的知识，还是自己发现的新知。就算明天是最后一天，能平平静静地在阅读和学习中度过，也安心了。&lt;/p&gt;
&lt;p&gt;我承认，自己有时也犯这毛病——把希望寄托在“万一”上面。即使我能如他人的期望，做一点事情——通俗地讲，赚一点钱，对现状的帮助实际上也只是“一点”的层面。我也不相信天道酬勤，勤劳不一定是有效的积累。勤劳能不能致富我也不知道，至少现实中看来勤劳脱贫几乎是不可能的。（讽刺的逻辑……）但我相信厚积薄发，说不定有生之年真的能知识改变命运呢。相信有效积累的我也决定让自己的战线拉长，遇到生命意外消亡也无所谓吧。&lt;/p&gt;
&lt;p&gt;M老师的文字，让我敬佩之情油然而生。真正的伟大事业奋斗者当是如此吧——至少和我读到的，而不是看到的一样。人生走到这个阶段，还能做个坚毅的理想主义者（不知道这样说是否欠妥）实属不易。若是一路与之抗争，走到今天的位置应该已经千疮百孔了。平心而论，我看不惯的太多，却成为不了一个能反抗的人。&lt;/p&gt;
&lt;p&gt;想起恩师在学校的时候，因为校长和院长的人事变动，从此院里连实验室都提供不了。在他合同到期，临近离校前，还在遗憾没能给我们提供更好的条件，带我们学习和做实验。&lt;/p&gt;
&lt;p&gt;有时候会想，有些人是不是小时候穷怕了。看到网友转载的几段来自人民日报的年代久远的论述，深刻意识到，藏在人性中贪婪的一面从来没有真正地淡化，相反，此刻义愤填膺者的记忆却是消失得最快的。我不知道怎么避免自己成为一个无情无记忆的普通网友，也不知道自己写出的文字会不会沦为“过激言论”。&lt;/p&gt;
&lt;p&gt;“高高举起，轻轻放下”。&lt;/p&gt;</description></item><item><title>大家当不了卷王，各自忙着转行</title><link>https://touchingfish.top/2020/cant-be-the-top-performer/</link><pubDate>Wed, 16 Sep 2020 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2020/cant-be-the-top-performer/</guid><description>&lt;p&gt;和老同桌（简称&amp;quot;老李&amp;quot;）见了一面。从高二以后就没再联系了，如果大家还在上学，今年就是研二。&lt;/p&gt;
&lt;p&gt;老李是广横走大学软工毕业，在微博上自嘲过&amp;quot;什么也不会&amp;quot;，对「b站编程天才少年」表示自愧不如。实际上，他也算是理科的学霸了，今天听他讲两句&amp;quot;人话&amp;quot;（不是动态上修饰了又修饰的文字），和我了解的一样。&lt;/p&gt;
&lt;p&gt;说起刷面试算法题，他自认为是在行的。毕竟底层的逻辑终究是数学思维，我十分认可他的能力。但项目并不这样，每个人只负责一小部分，架构的工作还是要靠有能力和经验的工程师。编程的体验不同，获得成就感的进度条也慢很多，所以他认为自己不适合。&lt;/p&gt;
&lt;p&gt;老李一直是个脑回路很新奇的人，跟他的微博一样，还有初中时爱写的打油诗，简直可以说是当代 freestyle 的先驱。聊起彼此这些年彪悍的人生，确实值得用文字记录下来。说来也巧，我们都是喜欢写日记的非正常人。不过他给我的理由，更是刺激我保持写作的习惯——&lt;strong&gt;日记是一件别人不能帮你做的事情&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;一开始以为他想当个老师，只是因为感觉自己&amp;quot;学艺不精&amp;quot;，多聊了两句才知道他对脱口秀情有独钟。不得不说，脱口秀跟他的气质太搭了，有趣的逻辑，深刻的思考，诙谐的表达。他说有过一次表演的经验，虽然没有得到良好的反馈，但收获难忘难得的巅峰体验。&lt;/p&gt;
&lt;p&gt;像每个独立思考的大学生一样，在大三的时候迷茫和焦虑达到顶峰，早在当时他就萌生了这样的想法。在他身边，是一群就读于被时代选中的专业的高材生，面对的诱惑是可以想象的。没有另一个像他一样的人，其实意志也并不坚定到可以完完全全地做自己。所以，现在算是他重新出发追求梦想。&lt;/p&gt;
&lt;p&gt;其实挺佩服他这样子，想清楚之后有所规划一顿猛干。生活便是素材的积累，这些经历经验，都能够成为他以后创造的灵感来源吧。&lt;/p&gt;
&lt;p&gt;我在大三时，做了一个很理想主义的决定，为了成为科学家而努力。如此朴实的考研的初衷，让我在本科最后的阶段越来越孤独。只能安慰自己，在其他学校可能像我一样的学生就多点了吧。并不是后悔，说实话，我有一种迷之自信。大家对我评价和期待都还挺不低的。特别是恩师的称赞——&amp;ldquo;300名学生中最杰出者&amp;rdquo;——让我倍感&amp;quot;捧杀&amp;quot;之压力。&lt;/p&gt;
&lt;p&gt;对我而言，越是了解一个领域的知识，越是不觉得自己有任何厉害之处。一时的领先，也许只是接触得比周围的人相对早些。况且我并不是学到了什么一手知识，现在的学习资源比当时丰富太多。可以找到一门科目的教学课程，完整地看完。通常是想要了解科班的学生对一个知识点需要认识到什么程度，好知道自己是不是需要查缺补漏。结果自然是&amp;quot;我还差得很远&amp;quot;。&lt;/p&gt;
&lt;p&gt;可能自己明明就没那么值得夸赞，也没达到有能力去追求科学梦想的水平（这里是去&amp;quot;追求&amp;quot;的能力，&amp;ldquo;实现&amp;quot;更是天方夜谭吧）。若是再在这条路上坚持，也许会有进步，但盲目自信是不会回应理想主义的。&lt;/p&gt;
&lt;p&gt;强如中大软工的老李，都觉得自己不适合IT。现在，刷到python广告会像看笑话一样。在网上看软件开发的职业培训课程时，也从弹幕感到大家的基础并不差。这些朋友尚且需要培训的加成，才能找到不错的工作，在没有积累的情况下能速成转码是一种纸上谈兵吧。&lt;/p&gt;
&lt;p&gt;人人都在转码，但并不是选对了方向你就行了。越是理想化，越容易受&amp;quot;幸存者偏差&amp;quot;的欺骗。要说门槛，计算机确实不算高。如果有更多时间努力，一定会有收获。做哪件事情不得脚踏实地（沉默成本）呢？再是多考虑一层&amp;quot;变现&amp;quot;而已。甩锅给内卷并不理智。&lt;/p&gt;
&lt;p&gt;因为选择，必然会错过一些最好的时机。转行意愿强烈的朋友，值得拥有更好的展示自我的机会。但生活游戏就是这样。希望朋友们转行一切顺利，也希望吐槽完快点找到能迈出的那一步。&lt;/p&gt;</description></item><item><title>天使飞过：无监管课堂的"自发静默"现象</title><link>https://touchingfish.top/2020/angel-passing-by/</link><pubDate>Wed, 15 Jul 2020 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2020/angel-passing-by/</guid><description>&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;p&gt;相信很多人学生时代都有过这样的经历：没有老师的自习课，教室里像集市一样吵闹；可一旦听到走廊里传来熟悉的脚步声，又能瞬间变得鸦雀无声。&lt;/p&gt;
&lt;p&gt;但更有趣的是，有时候根本不需要老师现身，同学们也能在极其短暂的时间内，不约而同地安静下来。明明没有人喊&amp;quot;老师来了&amp;quot;，明明没有任何明显的警告，可全班就像是商量好了一样，突然就没人说话了。这种&amp;quot;自发静默&amp;quot;的现象，确实耐人寻味。&lt;/p&gt;
&lt;h3 id="群体默契与心理暗示"&gt;群体默契与心理暗示&lt;/h3&gt;
&lt;p&gt;人是社会性的动物，很容易受周围环境的影响。当一个人率先安静下来，其他人也会不自觉地效仿，最终形成某种&amp;quot;无声的默契&amp;quot;。&lt;/p&gt;
&lt;p&gt;此外，心理暗示的作用同样不可忽视——一句&amp;quot;老师来了&amp;quot;，一个示意安静的手势，足以让所有人瞬间进入&amp;quot;课堂模式&amp;quot;，仿佛条件反射般自觉安静下来。&lt;/p&gt;
&lt;h3 id="复杂系统理论"&gt;复杂系统理论&lt;/h3&gt;
&lt;p&gt;我们不妨把课堂看作一个复杂适应系统，学生就是系统中的个体，彼此互动，共同营造课堂氛围。当老师出现，或者有学生率先闭上嘴巴，其他学生也会随之行动——这既是&amp;quot;从众心理&amp;quot;的体现，也是复杂适应系统中&amp;quot;涌现&amp;quot;现象的体现。课堂氛围的变化，也是系统对内外环境变化的自适应。&lt;/p&gt;
&lt;p&gt;那么，什么是复杂适应系统？简单来说，就是由众多相互作用、不断适应的个体所组成的系统。在这个系统中，个体之间并非孤立存在，而是通过种种联系紧密相连，共同构成一个有机整体。个体在与环境及其他个体互动的过程中，不断学习、进化，从而使整个系统呈现出动态平衡和自组织的特性。&lt;/p&gt;
&lt;p&gt;什么是&amp;quot;涌现&amp;quot;？就是系统整体所表现出的性质，并非个体性质的简单叠加，而是由个体之间相互作用所产生的新性质。比如蚁群的智慧，并非单个蚂蚁所具备，而是由无数蚂蚁协同合作所产生的。&lt;/p&gt;
&lt;h2 id="建模思路"&gt;建模思路&lt;/h2&gt;
&lt;p&gt;自习课上高谈阔论，这种行为多少有点&amp;quot;违规&amp;quot;。从小接受的规则意识教育，使我们在违反纪律时产生一种微妙的负罪感，于是在精神上处于一种高度警觉的状态。&lt;/p&gt;
&lt;p&gt;心理学上认为，老师在学生心中具有权威形象，代表着规则和秩序。老师一旦现身，学生潜意识里就会自觉遵守纪律，肃然安静。这就是条件反射——就像巴甫洛夫的狗听到铃声会流口水一样。&lt;/p&gt;
&lt;p&gt;学生的精神处于高度警觉状态，各种感官都被调动起来，随时关注教室外每一个&amp;quot;危险&amp;quot;信号。动物行为学家把这种高度紧张的状态，及表现出应对未知危险的行为趋势称为&amp;quot;冻结反应&amp;quot;（The Freeze Response）。&lt;/p&gt;
&lt;p&gt;如果有人误以为从窗户反光中看到了老师的身影，多会选择噤声自保。随着发声的人减少，环境音量因之降低，反而更能引起其他人的警觉，使其纷纷效仿。在这个正反馈效应中，教室内音量降低的速度越来越快。原本喧闹的教室，在看似没有任何警报的情况下，在极短时间内变得鸦雀无声。&lt;/p&gt;
&lt;h2 id="方法与结果"&gt;方法与结果&lt;/h2&gt;
&lt;h3 id="一维元胞自动机"&gt;一维元胞自动机&lt;/h3&gt;
&lt;p&gt;我们用一维元胞自动机来模拟这个过程。元胞自动机是由一列元胞构成的，每个元胞有自己的状态，按照规则在下一个时间步更新状态。&lt;/p&gt;
&lt;p&gt;在这个模型中，我们模拟的是一个五十人课堂的场景，每个元胞代表一名学生。每个学生可以处于&amp;quot;说&amp;quot;或&amp;quot;听&amp;quot;两种状态。我们用一列元胞来模拟课堂中学生们的状态，给每个元胞赋一个数值，正数表示&amp;quot;说&amp;quot;，负数表示&amp;quot;听&amp;quot;。&lt;/p&gt;
&lt;p&gt;假设时间步长为每0.1秒，学生说一句话最长需要10秒。我们给每个元胞随机赋值为-100到+100之间的整数。每个时间步，让状态数值的绝对值减1。如果元胞初始值为+100，经过100个时间步后减到0，表示一句话说完，需要10秒。当数值归零，下一个时间步就重新随机赋值于-100到+100之间。这样就能模拟出课堂中人声鼎沸的情形。&lt;/p&gt;
&lt;p&gt;&lt;img src="p1.png" alt="图1：一维元胞自动机及更新规则"&gt;&lt;/p&gt;
&lt;p&gt;我们用18000个时间步来模拟三十分钟内五十名学生在自习课上的聊天情形。&lt;/p&gt;
&lt;p&gt;&lt;img src="p2.png" alt="图2：元胞自动机模拟五十名学子在三十分钟内言语喧嚣之情状，红色示&amp;quot;言&amp;quot;，蓝色示&amp;quot;听&amp;quot;"&gt;&lt;/p&gt;
&lt;p&gt;通过统计当前时刻课堂中发言学生的人数，来衡量当时的噪音音量。&lt;/p&gt;
&lt;p&gt;&lt;img src="p3.png" alt="图3：自习课堂之噪音音量随时间变化的折线图"&gt;&lt;/p&gt;
&lt;h3 id="冻结反应"&gt;冻结反应&lt;/h3&gt;
&lt;p&gt;现在，我们把学生对老师的&amp;quot;心理阴影面积&amp;quot;和&amp;quot;冻结反应&amp;quot;考虑进来。为每个学生增设一个对低音量的警觉性x（注意，每个人对噪音的敏感程度不同，所以警觉性也有所差异）。&lt;/p&gt;
&lt;p&gt;例如，对于学生甲来说，如果课堂内说话的人数少于x人，他就会进入警戒状态，停止说话一秒。有些学生&amp;quot;心理阴影面积&amp;quot;比较大，更容易把音量下降误认为是老师出现带来的&amp;quot;压迫感&amp;quot;，所以x值相对较高；而胆大的学生，则需要等到课堂中只剩他一个人在跟同桌说话时才能意识到，x值就比较小。我们把这个x称为&amp;quot;心理阴影面积最小冻结音量&amp;quot;，简称&amp;quot;最小心冻音量&amp;quot;。&lt;/p&gt;
&lt;p&gt;在现有的一维元胞自动机基础上，我们需要添加新规则：在更新每个学生（元胞）状态数值时，先观察上一个时间步（即前0.1秒）的噪音音量是否低于该学生的最小心冻音量（即该元胞的x）。如果是，则在下一个时间步将状态数字重置为-10，表示接下来一秒内（十个时间步）该学生将采取&amp;quot;停、看、听&amp;quot;的策略；如果否，则按原规则继续填入数值。&lt;/p&gt;
&lt;p&gt;每次重置，都有可能使课堂噪音下降，逐渐逼近另一位学生的最小心冻音量x，促使更多人产生冻结反应。这就是&amp;quot;自发静默&amp;quot;现象的成因。&lt;/p&gt;
&lt;p&gt;&lt;img src="p4.png" alt="图4：引入最小心冻音量后出现自发静默现象"&gt;&lt;/p&gt;
&lt;p&gt;在这次模拟中，三十分钟内五十名学生在自习课上的聊天情形，引入最小心冻音量后，在约160秒左右，出现了自发静默的现象。&lt;/p&gt;
&lt;p&gt;&lt;img src="p5.png" alt="图5：噪音音量随时间变化折线图，约150秒后开始下降"&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://touchingfish.top/../application/an_anagel_passed_by/"&gt;&lt;strong&gt;在web应用上试一试&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;群体默契发生与否，与系统规模存在复杂关联，非线性复杂系统对初始参数非常敏感，所以模型的参数化过程需要谨慎。通过元胞自动机模拟所得数据，我们可以探究学生&amp;quot;最小心冻音量&amp;quot;对&amp;quot;自发静默现象&amp;quot;的主效应。&lt;/p&gt;
&lt;p&gt;在这个模型中，每个元胞的初始状态是随机的，只需要对每个学生的最小心冻音量进行参数化设定。&lt;/p&gt;
&lt;p&gt;为了让模拟更契合实际情形，我们设置了对老师出现不太敏感的学生，其最小心冻音量的最小值设为3（x_min = 3），即当课堂中仅剩3名学生说话时，该学生方才进入&amp;quot;冻结&amp;quot;状态。至于最小心冻音量的最大值，因难以依据现实情境确定，需通过模拟试验来探求。需要注意的是，如果无法对模型进行适当的参数化，则难以在有限（可计算之）时间步内观察到自组织现象的发生。&lt;/p&gt;
&lt;p&gt;在x_min = 3，且x_max = 17的参数下，我们进行了一万次模拟，并记录每次模拟中所有学生最小心冻音量之和S_x = Σ_i^50 x_i，与自发静默现象发生时间T（模拟时间步最大为18000，即三十分钟）的关系。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;th&gt;Estimate&lt;/th&gt;
 &lt;th&gt;Std.Error&lt;/th&gt;
 &lt;th&gt;t&lt;/th&gt;
 &lt;th&gt;P&lt;/th&gt;
 &lt;th&gt;Sig.&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;6.0676688&lt;/td&gt;
 &lt;td&gt;0.0829139&lt;/td&gt;
 &lt;td&gt;73.18&lt;/td&gt;
 &lt;td&gt;&amp;lt;2e-16&lt;/td&gt;
 &lt;td&gt;***&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;$S_x$&lt;/td&gt;
 &lt;td&gt;-0.0056127&lt;/td&gt;
 &lt;td&gt;0.0001652&lt;/td&gt;
 &lt;td&gt;-33.97&lt;/td&gt;
 &lt;td&gt;&amp;lt;2e-16&lt;/td&gt;
 &lt;td&gt;***&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="表1自发静默之现象发生时间与学子心理阴影面积之总和的线性回归"&gt;表1：自发静默之现象发生时间与学子&amp;quot;心理阴影面积&amp;quot;之总和的线性回归&lt;/h5&gt;
&lt;p&gt;我们将x_max的最大值设为15到19，分别进行了上千次模拟。随着x_max增加，自发静默现象的时间提前。统计这组实验中三十分钟内出现沉默现象的次数，计算频率。通过逻辑斯蒂回归获得拟合方程：&lt;/p&gt;
&lt;p&gt;&lt;img src="p6.png" alt="图6：逻辑斯蒂回归模型及阈值"&gt;&lt;/p&gt;</description></item><item><title>编程语言中的函数</title><link>https://touchingfish.top/2020/c-functions-of-programming/</link><pubDate>Fri, 29 May 2020 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2020/c-functions-of-programming/</guid><description>&lt;p&gt;数学上的函数是指一种映射关系，通常用来将一个输入（或多个输入）映射到一个输出。对于每一个特定的输入，总是有一个确定的输出。例如，函数 f(x) = x² 将输入 x 映射为其平方。&lt;/p&gt;
&lt;p&gt;编程语言中的函数与之类似，具有输入和输出的概念，但其本质上更广泛和灵活。&lt;/p&gt;
&lt;p&gt;在编程中，函数不仅可以执行计算，还可以执行一系列操作，如修改数据、输出信息、读取文件等。函数在编程中是用来封装一段代码，使得该代码可以复用，并且能够通过调用函数来执行特定的任务。&lt;/p&gt;
&lt;p&gt;编程语言中的函数通常具有以下的特点：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;定义与调用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;定义函数时，需要给出函数名、参数（如果有）和函数体。&lt;/li&gt;
&lt;li&gt;调用函数时，通过函数名和传递的参数来执行函数。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;参数与返回值：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;函数通常接受参数（inputs），并可能返回一个值（output）。&lt;/li&gt;
&lt;li&gt;某些函数可能不接受参数或不返回值（如在 C 语言中使用 &lt;code&gt;void&lt;/code&gt; 关键字）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;封装与抽象：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;函数将代码封装起来，使得复杂操作可以通过简单的函数调用来实现。&lt;/li&gt;
&lt;li&gt;通过函数的使用，可以更容易地理解和管理代码结构。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;作用域：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;函数的内部变量通常具有局部作用域，即它们只能在函数内部访问。&lt;/li&gt;
&lt;li&gt;这种作用域规则有助于避免变量命名冲突和意外的值修改。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id="windows-c-的函数编程"&gt;Windows C 的函数编程&lt;/h1&gt;
&lt;h2 id="函数声明与定义"&gt;函数声明与定义&lt;/h2&gt;
&lt;p&gt;在使用函数前需要进行声明（或称为函数原型声明）。例如，&lt;code&gt;int add(int a, int b);&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;函数的定义包括函数的返回类型、函数名、参数列表和函数体。&lt;/p&gt;
&lt;h2 id="返回类型"&gt;返回类型&lt;/h2&gt;
&lt;p&gt;每个函数必须有一个返回类型，表明该函数返回的数据类型。&lt;/p&gt;
&lt;p&gt;如果函数不返回任何值，使用 &lt;code&gt;void&lt;/code&gt; 作为返回类型。&lt;/p&gt;
&lt;h2 id="参数传递"&gt;参数传递&lt;/h2&gt;
&lt;p&gt;C 语言中的函数参数通常是按值传递的，即传递的是参数的副本，函数内部的修改不会影响原参数。&lt;/p&gt;
&lt;p&gt;如果需要函数内部修改外部变量的值，可以使用指针进行参数传递。&lt;/p&gt;
&lt;h2 id="变量的作用域"&gt;变量的作用域&lt;/h2&gt;
&lt;p&gt;局部变量只在离自己最近的大括号内有效。&lt;strong&gt;形式参数&lt;/strong&gt;也是局部变量。&lt;/p&gt;
&lt;p&gt;全局变量在源文件中定义，占用的内存不会因为程序结束而释放，二是在整个进程的执行过程中一直有效。&lt;/p&gt;
&lt;p&gt;变量的存储方式分为：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;静态存储方式：程序运行期间，由系统分配固定的存储空间，&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;动态存储方式：程序运行时根据需要进行动态的分配存储空间。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="外部变量"&gt;外部变量&lt;/h3&gt;
&lt;p&gt;全局变量在源程序文件（一个编译单位）中，从定义位置到文件末尾一直有效。可以使用 &lt;code&gt;extern&lt;/code&gt; 扩展变量的作用域。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-C" data-lang="C"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;extern&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//扩展全局变量k的作用域
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;k = %d&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//全局变量k的定义与生效，向下↓
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;头文件&lt;/strong&gt;是扩展名为 .h 的文件，包含了 C 函数声明和宏定义，被多个源文件中引用共享。&lt;strong&gt;全局变量不能定义在头文件中&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>结构体与对齐原则</title><link>https://touchingfish.top/2020/struct-and-alignment-rule/</link><pubDate>Tue, 12 May 2020 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2020/struct-and-alignment-rule/</guid><description>&lt;h2 id="结构体"&gt;结构体&lt;/h2&gt;
&lt;p&gt;结构体（struct）是一种用户自定义的数据类型，它允许我们将不同类型的数据组合在一起形成一个整体，从而更好地表示复杂的数据。&lt;/p&gt;
&lt;p&gt;结构体是 C 语言中非常重要的一种数据类型，广泛应用于各种编程场景。&lt;/p&gt;
&lt;p&gt;声明和定义结构体时，需要在语句末尾添加分号（&amp;quot;;&amp;quot;）&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;student&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;gender&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;socre&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;&lt;span class="c1"&gt;//语句末尾的分号（;）必不可少
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;student&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;9001&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Alice&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sc"&gt;&amp;#39;M&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;98.9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;LA&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;student&lt;/span&gt; &lt;span class="n"&gt;sarr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;scanf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;%d%s %c%d%f%s&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;sarr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;sarr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;sarr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;gender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;sarr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;sarr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;socre&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;sarr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;%d %s %c %d %.2f %s&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;socre&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;%d %s %c %d %.2f %s&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;sarr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;sarr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;sarr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;gender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;sarr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;sarr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;socre&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;sarr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;结构体嵌套：&lt;/strong&gt; 结构体中可以嵌套其他结构体。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Student&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Date&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;year&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;day&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="n"&gt;birthday&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;gender&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;C 语言允许定义&lt;strong&gt;无类型名的结构类型&lt;/strong&gt; ，常用于内嵌的结构类型：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;struct&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;year&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;day&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="n"&gt;birthday&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;当 类型名 &amp;ldquo;&lt;code&gt;Date&lt;/code&gt;&amp;rdquo; 省略时，必须后随结构变量 &amp;ldquo;&lt;code&gt;birthday&lt;/code&gt;&amp;rdquo; 的定义。&lt;/p&gt;</description></item><item><title>字符串与字符数组</title><link>https://touchingfish.top/2020/character-array/</link><pubDate>Sat, 09 May 2020 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2020/character-array/</guid><description>&lt;p&gt;字符串是由一系列字符组成的字符数组，并以空字符 &lt;code&gt;'\0'&lt;/code&gt; 结尾。&lt;/p&gt;
&lt;p&gt;字符数组与字符串的概念在 C 语言中密不可分，是计算机处理文本时的基础。&lt;/p&gt;
&lt;h2 id="字符数组与字符串数组"&gt;字符数组与字符串数组&lt;/h2&gt;
&lt;h3 id="字符数组"&gt;字符数组&lt;/h3&gt;
&lt;p&gt;字符数组：一个存储字符的数组 &lt;code&gt;char str[6] = &amp;quot;hello&amp;quot;;&lt;/code&gt;，通常用于表示字符串。&lt;/p&gt;
&lt;p&gt;字符数组 &lt;code&gt;str&lt;/code&gt; 包含5个字符 &lt;code&gt;'h'&lt;/code&gt;, &lt;code&gt;'e'&lt;/code&gt;, &lt;code&gt;'l'&lt;/code&gt;, &lt;code&gt;'l'&lt;/code&gt;, &lt;code&gt;'o'&lt;/code&gt; 和一个隐含的结尾字符 &lt;code&gt;'\0'&lt;/code&gt;，表示字符串的结束。&lt;/p&gt;
&lt;p&gt;因此，字符数组初始化时，大小应比存储的字符串长读至少多一个字节。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1234567890&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;%s&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//输出结果为：123456789烫烫烫
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//表示此时赋值没有结束符，使用%s输出会在&amp;#39;\0&amp;#39;处停止
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="字符串数组"&gt;字符串数组&lt;/h3&gt;
&lt;p&gt;包含多个字符串的数组。例如：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;names&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Alice&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Bob&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Charlie&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这个 &lt;code&gt;names&lt;/code&gt; 数组包含三个字符串，每个字符串最多可以容纳 9 个字符（最后一个字符是 &lt;code&gt;'\0'&lt;/code&gt;）。&lt;/p&gt;
&lt;h2 id="字符串的打印"&gt;字符串的打印&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;printf&lt;/code&gt; 函数用于格式化输出字符串和字符。此时，&lt;strong&gt;使用 &lt;code&gt;%s&lt;/code&gt; 和 &lt;code&gt;%c&lt;/code&gt; 来打印字符串和字符有明显区别&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;%s&lt;/code&gt;：用于打印字符串，即一系列字符直到遇到 &lt;code&gt;'\0'&lt;/code&gt; 结束。例如：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;%s&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 输出: hello
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;%c&lt;/code&gt;：用于打印单个字符。例如：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;ch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sc"&gt;&amp;#39;A&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;%c&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 输出: A
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果使用 &lt;code&gt;%s&lt;/code&gt; 打印一个字符数组，程序会输出从该地址开始的所有字符，直到遇到 &lt;code&gt;'\0'&lt;/code&gt;。而使用 &lt;code&gt;%c&lt;/code&gt; 只会打印单个字符。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;[])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;%c&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//%c是单字符逐一打印
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;123456789&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;%s&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//%s从起始地址开始打印字符串，在&amp;#39;\0&amp;#39;处结束
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//此处&amp;#34;c&amp;#34;是字符数组名，表示字符数组的起始地址
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="字符串的初始化"&gt;字符串的初始化&lt;/h2&gt;
&lt;h3 id="scanf-函数"&gt;&lt;code&gt;scanf&lt;/code&gt; 函数&lt;/h3&gt;
&lt;p&gt;在使用 &lt;code&gt;scanf&lt;/code&gt; 函数读取字符串时，有一些重要的注意事项：&lt;/p&gt;</description></item><item><title>数组与指针</title><link>https://touchingfish.top/2020/array-and-pointer/</link><pubDate>Mon, 04 May 2020 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2020/array-and-pointer/</guid><description>&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;数组和指针的关系：在 C 语言中，数组名其实是一个指针，指向数组的第一个元素。例如，如果你有一个数组 &lt;code&gt;int arr[10];&lt;/code&gt;，那么 &lt;code&gt;arr&lt;/code&gt; 实际上是指向 &lt;code&gt;arr[0]&lt;/code&gt; 的指针。这意味着你可以用指针来遍历数组，也可以通过指针操作数组元素。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;通过指针访问数组：当你理解了数组名是一个指针后，你就能明白为什么 &lt;code&gt;*(arr + 1)&lt;/code&gt; 等价于 &lt;code&gt;arr[1]&lt;/code&gt;。这个表达式的意思是“通过指针 &lt;code&gt;arr&lt;/code&gt;，向后移动一个位置，然后取该位置的值”。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;指针的灵活性：数组在定义时大小是固定的，而指针则更为灵活，可以指向任何内存位置。这使得你在处理数据时，能够更灵活地进行操作，例如动态分配内存或处理不同类型的数据结构。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;内存理解：通过理解指针如何操作数组，你会对内存管理有更深入的认识。这在 C 语言中尤为重要，因为你需要手动管理内存，避免错误操作。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;把数组和指针放在一起学习，有助于更深入地理解两者的工作原理，可以更好地理解内存和数据访问的底层机制，让编程更加高效和可靠。&lt;/p&gt;
&lt;h2 id="数组"&gt;数组&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;具有相同的数据类型&lt;/li&gt;
&lt;li&gt;使用过程中需要保留原始数据&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="一维数组"&gt;一维数组&lt;/h3&gt;
&lt;p&gt;数组初始化中的常量表达式：&lt;strong&gt;数组名 [常量表达式]&lt;/strong&gt;（通常为常量，或宏定义的符号常量）表示数组的大小，这是因为&lt;strong&gt;一个函数的函数栈空间大小是固定的&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;数组元素的引用方式是 &lt;strong&gt;数组名 [下标]&lt;/strong&gt;（从 0 开始）访问数组中的数据&lt;/p&gt;
&lt;h4 id="数组在内存中的存放"&gt;数组在内存中的存放&lt;/h4&gt;
&lt;p&gt;数组存放在一块连续的内存中，元素间的地址根据其数据类型所占字节数决定。&lt;/p&gt;
&lt;h4 id="访问越界-out-of-bounds-access"&gt;访问越界 (Out-of-Bounds Access)&lt;/h4&gt;
&lt;p&gt;C 语言的内存管理：先定义的变量在高地址，后定义的变量在低地址。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 定义一个整数变量 i，并赋值为 10
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt; &lt;span class="c1"&gt;// 定义一个大小为 3 的整数数组
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Before out-of-bounds access:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;i = %d&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;arr[0] = %d, arr[1] = %d, arr[2] = %d&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 访问数组的第 4 个元素（越界访问）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;After out-of-bounds access:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;i = %d&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 查看 i 的值是否被改变
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;arr[0] = %d, arr[1] = %d, arr[2] = %d&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;当访问越界发生时，新定义的数组元素可能覆盖了先定义的变量&lt;code&gt;i&lt;/code&gt;的地址（高地址），&lt;code&gt;i&lt;/code&gt;的值（该地址中的值）发生改变。&lt;/p&gt;</description></item><item><title>C语言程序设计基础</title><link>https://touchingfish.top/2020/c-programming-fundamental/</link><pubDate>Fri, 01 May 2020 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2020/c-programming-fundamental/</guid><description>&lt;p&gt;在程序设计中，&lt;strong&gt;基本数据类型&lt;/strong&gt;决定了变量可以存储的值和可执行的操作。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;运算符与表达式&lt;/strong&gt;用于执行各种计算和逻辑操作，如加减乘除、比较和逻辑运算，是编写有效程序的核心。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;选择和循环结构&lt;/strong&gt;控制程序流程，通过条件判断和重复执行代码块，实现复杂的逻辑和功能。&lt;/p&gt;
&lt;h2 id="基本数据类型"&gt;基本数据类型&lt;/h2&gt;
&lt;p&gt;C 语言的数据类型包括：基本类型（整型、浮点型、字符型等）、构造类型（数组、结构体）、指针类型、空类型。&lt;/p&gt;
&lt;h3 id="整型"&gt;整型&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;int&lt;/code&gt; 4 字节&lt;/p&gt;
&lt;p&gt;&lt;code&gt;short&lt;/code&gt; 2 字节&lt;/p&gt;
&lt;p&gt;&lt;code&gt;long&lt;/code&gt; 4 字节（Windows 32位/64位）、8 字节（Linux 64位）&lt;/p&gt;
&lt;blockquote&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;-&lt;/th&gt;
 &lt;th&gt;ILP32&lt;/th&gt;
 &lt;th&gt;LP64&lt;/th&gt;
 &lt;th&gt;LLP64&lt;/th&gt;
 &lt;th&gt;ILP64&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;char&lt;/td&gt;
 &lt;td&gt;8&lt;/td&gt;
 &lt;td&gt;8&lt;/td&gt;
 &lt;td&gt;8&lt;/td&gt;
 &lt;td&gt;8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;short&lt;/td&gt;
 &lt;td&gt;16&lt;/td&gt;
 &lt;td&gt;16&lt;/td&gt;
 &lt;td&gt;16&lt;/td&gt;
 &lt;td&gt;16&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;int&lt;/td&gt;
 &lt;td&gt;32&lt;/td&gt;
 &lt;td&gt;32&lt;/td&gt;
 &lt;td&gt;32&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;long&lt;/td&gt;
 &lt;td&gt;32&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;32&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;long long&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;void *&lt;/td&gt;
 &lt;td&gt;32&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;数据模型命名规则&lt;/strong&gt;：&lt;code&gt;I&lt;/code&gt;=int，&lt;code&gt;L&lt;/code&gt;=long，&lt;code&gt;P&lt;/code&gt;=pointer，数字表示位数。ILP32 表示 int/long/pointer 均为 32 位；LP64 表示 long/pointer 为 64 位；LLP64 表示 long long/pointer 为 64 位；ILP64 表示 int/long/pointer 均为 64 位。&lt;/p&gt;</description></item><item><title>从源代码到可执行程序</title><link>https://touchingfish.top/2020/journey-to-c-language/</link><pubDate>Fri, 01 May 2020 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2020/journey-to-c-language/</guid><description>&lt;p&gt;编程是和计算机对话的过程。我们按照计算机能理解的方式，用抽象的编程语言来描述算法和逻辑，给计算机下达指令，让它完成工作。&lt;/p&gt;
&lt;p&gt;在 C 语言的程序开发过程中，预处理、编译和汇编是将源代码转化为可执行程序的几个关键阶段。理解它们之间的关系有助于更好地理解C语言的编译过程。下面将详细介绍这几个阶段的作用及其相互关系。&lt;/p&gt;
&lt;h2 id="预处理"&gt;预处理&lt;/h2&gt;
&lt;p&gt;预处理（Preprocessing）是 C 语言编译过程中的第一个阶段。在这个阶段，C 编译器的预处理器（Preprocessor）处理代码中的预处理指令，如 &lt;code&gt;#include&lt;/code&gt;、&lt;code&gt;#define&lt;/code&gt;、&lt;code&gt;#ifdef&lt;/code&gt; 等。这些指令通常用来管理宏定义、文件包含、条件编译等。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;宏替换：将所有定义的宏替换为相应的代码。例如：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define PI 3.14
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在程序中所有出现 &lt;code&gt;PI&lt;/code&gt; 的地方，都会被替换为 &lt;code&gt;3.14&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;文件包含：将 &lt;code&gt;#include&lt;/code&gt; 指定的头文件内容插入到当前文件中。例如：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;会将 &lt;code&gt;stdio.h&lt;/code&gt; 文件的内容包含到当前源文件中。在一段代码中，通常会在首行引用头文件，指令告诉 &lt;code&gt;CPP&lt;/code&gt; 从系统库中获取 &lt;code&gt;stdio.h&lt;/code&gt;，并拷贝其中的文本到当前的源文件里。（&lt;strong&gt;乱用头文件会影响编译的效率&lt;/strong&gt;）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;条件编译：根据条件判断是否编译某些代码段。例如：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#ifdef DEBUG
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Debug mode&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;只有在定义了 &lt;code&gt;DEBUG&lt;/code&gt; 宏的情况下，&lt;code&gt;printf&lt;/code&gt; 语句才会被编译。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;预处理后的输出是一个扩展的源文件，其中所有的预处理指令都已经被处理和替换。这个文件将传递给编译器的下一阶段。&lt;/p&gt;
&lt;h2 id="编译"&gt;编译&lt;/h2&gt;
&lt;p&gt;编译（Compilation）是将预处理后的 C 代码转换为汇编代码的过程。编译器会检查代码的语法和结构，优化代码，并生成汇编代码。&lt;/p&gt;
&lt;p&gt;在这个阶段，编译器会执行以下操作：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;语法分析：检查代码的语法是否正确，确保符合C语言的语法规则。&lt;/li&gt;
&lt;li&gt;语义分析：检查代码的语义是否合理，例如变量类型的正确性、函数调用的合法性等。&lt;/li&gt;
&lt;li&gt;优化：编译器可能会对代码进行优化，以提高生成代码的运行效率。&lt;/li&gt;
&lt;li&gt;生成汇编代码：将C语言的代码转换为特定硬件架构的汇编语言。例如，&lt;code&gt;gcc&lt;/code&gt; 编译器将生成 &lt;code&gt;.s&lt;/code&gt; 文件（包含汇编代码）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;汇编代码是一种低级语言，更接近机器代码，但仍然是人类可读的（如 &lt;code&gt;MOV&lt;/code&gt;, &lt;code&gt;ADD&lt;/code&gt; 等指令）。&lt;/p&gt;
&lt;h2 id="汇编"&gt;汇编&lt;/h2&gt;
&lt;p&gt;汇编（Assembly）是将汇编代码转换为机器代码的过程。在这个阶段，汇编器（Assembler）会将汇编代码翻译成目标机器的二进制指令，这些指令可以直接在处理器上执行。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;生成目标文件：汇编器将生成一个目标文件（通常是 &lt;code&gt;.o&lt;/code&gt; 或 &lt;code&gt;.obj&lt;/code&gt; 文件），它包含了机器代码以及一些调试和链接信息。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;目标文件最终会被打包成可执行文件（例如 &lt;code&gt;.exe&lt;/code&gt; 文件），可以直接在计算机上运行。&lt;/p&gt;
&lt;h2 id="关系与流程"&gt;关系与流程&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;预处理是编译的第一步，处理宏、头文件等预处理指令，生成一个纯C语言的源代码文件。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;编译阶段将预处理后的源代码翻译为汇编代码，这个过程中包括了语法检查、优化等重要步骤。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;汇编阶段将汇编代码转换为机器代码，生成目标文件。&lt;/p&gt;</description></item><item><title>磷与甲藻（One Glance）</title><link>https://touchingfish.top/2020/phosphorus-and-dinoflagellate/</link><pubDate>Sun, 05 Apr 2020 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2020/phosphorus-and-dinoflagellate/</guid><description>&lt;h2 id="初识"&gt;初识&lt;/h2&gt;
&lt;p&gt;强壮前沟藻。这个名字我念了无数遍，从最初的拗口到后来的脱口而出，像是在念一个老朋友的姓名。&lt;/p&gt;
&lt;p&gt;它是一种有害赤潮甲藻，隶属于甲藻门，甲藻纲，腰鞭毛目，裸甲藻科，前沟藻属。分布在世界各热带和温带海域。在国内，主要在南海和海南三亚能看到它的身影&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;。我不知道有没有人去统计过，这种小小的藻类每年造成了多少经济损失，又让多少沿海居民夜不能寐。我只知道，当我在显微镜下第一次看到它的时候，它的鞭毛在载玻片上划出优雅的弧线，那一刻我完全忘了它&amp;quot;赤潮生物&amp;quot;的恶名。&lt;/p&gt;
&lt;p&gt;最初接触这个课题，是因为她。她的毕业论文就是这个方向——强壮前沟藻对膦酸酯的利用。她的导师给我们上过专业课，早就已经是熟面孔了；后来她选择做这个方向，其实也是顺延老师博士论文的研究。&lt;/p&gt;
&lt;p&gt;那段时间的我自己有些茫然。程老师已经离开学校，剩下的事情只能远程沟通，偶尔发发邮件。看着她每天往实验室跑，和老师讨论进度，我有点被那种状态感染——至少她知道自己在做什么。&lt;/p&gt;
&lt;p&gt;她做实验的时候，我有时也去实验楼蹭校园网。老师也是我舍友的导师，一点儿不把我当外人，偶尔会跟她开玩笑说：&amp;ldquo;让你男朋友多练习，以后可以帮忙。&amp;rdquo;&lt;/p&gt;
&lt;p&gt;有一次陪她去办公室汇报进度。别看老师话不多，但问的问题很细：培养温度多少、光照强度多少、计数用的是哪种方法。她答得有些紧张，我在旁边坐着，插不上话，只能假装在看墙上贴的培养箱操作规程。&lt;/p&gt;
&lt;p&gt;汇报结束后，老师送我们出来，路过走廊尽头的一排锥形瓶培养架，他指给我看：&amp;ldquo;这是另外几个课题组做的，有做东海原甲藻的，有做雨生红球藻的——你们海洋藻类这块，其实做得挺多的。&amp;ldquo;那时候我还不懂这个圈子，只觉得老师为人客气。后来才明白，这种&amp;quot;带你看看&amp;quot;的习惯，是对科研新手难得的温柔。&lt;/p&gt;
&lt;h2 id="磷的宇宙"&gt;磷的宇宙&lt;/h2&gt;
&lt;p&gt;磷是DNA的骨架，是ATP的能量来源，是细胞膜磷脂双分子层的组成部分&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;。磷不仅影响着海洋浮游植物的细胞大小、营养状况、光合作用效率，更对群落的种类组成和数量有深远影响&lt;sup id="fnref1:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;。缺磷的浮游植物，像是被抽走了脊梁的人，生命变得脆弱而迟缓。&lt;/p&gt;
&lt;p&gt;传统的海洋生态学认为，氮是主要的限制性营养元素。但越来越多的研究表明，在全球海域中，磷限制正在成为比氮限制更普遍的问题&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;sup id="fnref:4"&gt;&lt;a href="#fn:4" class="footnote-ref" role="doc-noteref"&gt;4&lt;/a&gt;&lt;/sup&gt;。在长远的地质时期，磷被认为是海洋生态系统中重要的终级限制性营养元素&lt;sup id="fnref1:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;sup id="fnref1:4"&gt;&lt;a href="#fn:4" class="footnote-ref" role="doc-noteref"&gt;4&lt;/a&gt;&lt;/sup&gt;。&lt;/p&gt;
&lt;p&gt;海洋中的溶解态磷主要包括溶解无机磷和溶解有机磷两种。无机磷可以直接被浮游植物利用，在光线充足且生产力高的真光层中会被快速消耗殆尽。而溶解有机磷则主要以两种形式存在：磷酸酯和膦酸酯。海水中约75%的高分子量溶解有机磷是磷酸酯，以C-O-P键为特征，主要存在于核酸以及膜磷脂等大分子中&lt;sup id="fnref:5"&gt;&lt;a href="#fn:5" class="footnote-ref" role="doc-noteref"&gt;5&lt;/a&gt;&lt;/sup&gt;。膦酸酯占海水中高分子量溶解有机磷的25%，以稳定而难以断裂的C-P键为特征，经常存在于含磷蛋白以及膜膦脂中&lt;sup id="fnref1:5"&gt;&lt;a href="#fn:5" class="footnote-ref" role="doc-noteref"&gt;5&lt;/a&gt;&lt;/sup&gt;。&lt;/p&gt;
&lt;p&gt;浮游植物可以利用磷酸酯，主要通过碱性磷酸酶的水解作用将C-O-P键断裂，释放出可供细胞利用的无机磷&lt;sup id="fnref:6"&gt;&lt;a href="#fn:6" class="footnote-ref" role="doc-noteref"&gt;6&lt;/a&gt;&lt;/sup&gt;。但膦酸酯的C-P键极为稳定，难以被一般的磷酸酶水解。细菌可以表达C-P裂解酶来利用膦酸酯，这在原核藻类如蓝藻中已有报道&lt;sup id="fnref:7"&gt;&lt;a href="#fn:7" class="footnote-ref" role="doc-noteref"&gt;7&lt;/a&gt;&lt;/sup&gt;。但真核浮游植物能否直接利用膦酸酯？这个问题在文献中少有定论，零星的报道也存在争议。&lt;/p&gt;
&lt;h2 id="养藻"&gt;养藻&lt;/h2&gt;
&lt;p&gt;她用的实验材料是2-AEP，即2-氨基乙基膦酸，是一种典型的天然膦酸酯化合物。实验设置了三组条件：不加磷、不加磷但加2-AEP、加磷作为对照。&lt;/p&gt;
&lt;p&gt;我帮她分担了一部分计数和测量的工作——说是帮忙，其实更像是在学习。她教我怎么用浮游生物计数板，怎么判断藻细胞的状态，什么时候该稀释、什么时候该补充营养液。听起来简单，做起来才知道，实验的每一个环节都藏着陷阱。藻种要活化、培养基要灭菌、抗生素要适量——除菌处理对藻的生长影响不大，但细菌污染会让整个实验报废&lt;sup id="fnref:8"&gt;&lt;a href="#fn:8" class="footnote-ref" role="doc-noteref"&gt;8&lt;/a&gt;&lt;/sup&gt;。&lt;/p&gt;
&lt;p&gt;每隔两天取样一次。取1000微升藻液，视生长情况稀释后，加入Logul&amp;rsquo;s试剂，在显微镜下用浮游生物计数板人工计数。同时测量培养体系中无机磷的浓度——磷钼蓝法，取藻液过滤后加入试剂，静置片刻，通过分光光度计读数。数据点一个个累积，曲线在坐标纸上渐渐成形。&lt;/p&gt;
&lt;p&gt;那段时间我们聊了很多。关于毕业以后要做什么，要不要继续考研，她说，&amp;ldquo;再做下去头发要掉光了&amp;rdquo;。我说我也不确定……两个人站在培养箱前面，一边看着那些锥形瓶，一边说着不着边际的话。那大概是那段日子里最轻松的时刻。&lt;/p&gt;
&lt;h2 id="一眼看到头"&gt;一眼看到头&lt;/h2&gt;
&lt;p&gt;实验结果出来那天，她沉默了很久。&lt;/p&gt;
&lt;p&gt;到第八天的时候，三个条件下的磷酸盐浓度都趋近于零。加磷组的细胞密度开始下降，而不加磷和加2-AEP组的细胞密度始终没有明显增长。反复确认了计数结果，确认了仪器校准，确认了没有在某个环节犯蠢。&lt;/p&gt;
&lt;p&gt;事实就是这样：强壮前沟藻不能利用2-AEP作为唯一的磷源。&lt;/p&gt;
&lt;p&gt;那天从实验室出来，我们去后街买了烤冷面。两个人站在路灯下吃着，一时不知道该说什么。她的表情与其说是失落，不如说是某种释然——&amp;ldquo;至少结果很清晰，&amp;ldquo;她说，&amp;ldquo;阴性结果也是结果。&amp;rdquo;&lt;/p&gt;
&lt;p&gt;我点点头，没有告诉她我心里其实松了一口气：她的论文可以写完了。&lt;/p&gt;
&lt;p&gt;后来她跟我说，她其实早就猜到会是这样。&amp;ldquo;所以才不想继续考研、做实验，&amp;ldquo;她说，&amp;ldquo;一眼看到头。&amp;rdquo;&lt;/p&gt;
&lt;h2 id="基因的故事"&gt;基因的故事&lt;/h2&gt;
&lt;p&gt;研究还要继续。老师建议她做一下基因分析，看看转录组里有没有与膦酸酯代谢相关的基因。我帮她跑了BLAST分析，结果出来的时候有点意外：强壮前沟藻转录组中确实存在phnW和ppd的同源序列。phnW编码2-氨基乙基膦酸-丙酮酸转氨酶，与C-P键有机磷的降解有关；ppd与磷酮酸脱羧酶同源，可能参与膦酸酯的合成代谢。&lt;/p&gt;
&lt;p&gt;这意味着什么？意味着这种藻类的祖先或许曾经拥有过利用膦酸酯的能力，又在演化过程中失去了。而更可能的原因是——它缺少一种将胞外2-AEP转运到细胞内部的酶。外界的有机磷进不来，细胞内的酶只能干看着。&lt;/p&gt;
&lt;p&gt;这个发现与同期其他研究者的发现一致。有研究表明，甲藻剧毒卡尔藻同样无法直接利用外部膦酸酯，但培养体系中存在的细菌能有效降解C-P键有机磷以释放出磷酸盐供藻细胞利用&lt;sup id="fnref:9"&gt;&lt;a href="#fn:9" class="footnote-ref" role="doc-noteref"&gt;9&lt;/a&gt;&lt;/sup&gt;。&lt;/p&gt;
&lt;p&gt;老师看完结果，跟她说：&amp;ldquo;这个结论可以写。&amp;ldquo;语气平淡，但看得出他还是比较满意的。&lt;/p&gt;
&lt;h2 id="尾声"&gt;尾声&lt;/h2&gt;
&lt;p&gt;后来，只有老师和我还保持着联系，互通鱼雁……&lt;/p&gt;
&lt;p&gt;偶尔会想起那段日子。想起那些锥形瓶，培养箱，显微镜下游动的鞭毛。想起她站在培养箱前面说&amp;quot;一眼看到头&amp;quot;时的表情。&lt;/p&gt;
&lt;p&gt;关于磷限制与海洋生态的关系，还有太多未知。膦酸酯在磷匮乏海域的生物地球化学循环是否与细菌群落结构有关？是否存在真核浮游植物能够直接利用自然合成的膦酸酯？膦酸酯转运蛋白在原核和真核之间的分布有什么规律？&lt;/p&gt;
&lt;p&gt;这些问题没有在这次研究中得到回答。&lt;/p&gt;
&lt;p&gt;膦酸酯要变成可吸收的磷，需要细菌来“翻译”。&lt;/p&gt;
&lt;p&gt;强壮前沟藻依然在后街某个实验室的锥形瓶里摇曳它的鞭毛。它不知道我对它的期待，也不知道我的困惑。它只是按照自己的方式活着，消耗磷，响应光，在无人知晓的微观世界里完成它的生命循环。&lt;/p&gt;
&lt;p&gt;而我们，大概也是这样。&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;林永水, 周近明, 何建宗. 赤潮生物[M]. 北京: 科学出版社, 2001.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;Paytan A, McLaughlin K. The oceanic phosphorus cycle[J]. Chemical Reviews, 2007, 107(2): 563-576.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&amp;#160;&lt;a href="#fnref1:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;Toggweiler J R. An ultimate limiting nutrient[J]. Nature, 1999, 400(6744): 511-512.&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&amp;#160;&lt;a href="#fnref1:3" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:4"&gt;
&lt;p&gt;Tyrrell T. The relative influences of nitrogen and phosphorus on oceanic primary production[J]. Nature, 1999, 400(6744): 525-531.&amp;#160;&lt;a href="#fnref:4" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&amp;#160;&lt;a href="#fnref1:4" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>人生 DEBUG</title><link>https://touchingfish.top/2020/living-and-debugging/</link><pubDate>Sat, 28 Mar 2020 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2020/living-and-debugging/</guid><description>&lt;p&gt;&lt;strong&gt;Appreciate&lt;/strong&gt; 的两种解释：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;to say thanks for something，not to take it for granted. 感激，不要把优点和成功当作理所当然&lt;/li&gt;
&lt;li&gt;to grow 增值&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;When we appreciate the good，the good appreciates&lt;/strong&gt; —— the good grows.&lt;/p&gt;
&lt;p&gt;“我们会看到要寻找的东西，错失不去寻找的东西，虽然它在那里，我们的阅历被我们的关注点深深地影响了。”&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“We see what we look for and we miss much of what we are not looking for even though it is there… Our experience of the world is heavily influenced by where we piace our attention.” —— Stavros and Torres&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;感恩2019上半年，毕业论文和汕大打工人的日子让我能在翻译软件的帮助下熟练地阅读英文。&lt;/p&gt;
&lt;p&gt;感谢鸠摩搜书和微盘，让我如愿下载到了 Tal.Ben.Shahar 的《Happier》并开始准备阅读。&lt;/p&gt;</description></item><item><title>科研品味是什么（Research Taste）</title><link>https://touchingfish.top/2020/cultivate-an-appreciation-for-research/</link><pubDate>Tue, 25 Feb 2020 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2020/cultivate-an-appreciation-for-research/</guid><description>&lt;p&gt;&lt;em&gt;——写于2020年初家里蹲期间，翻译水平不行，后已多次自我批评并作出更正。&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;20 考研的初试成绩出来了，想跟未来的研究生们聊点什么。&lt;/p&gt;
&lt;p&gt;早知道学术里有灌水的现象，真正的体会还是自己读研的时候。每天都是“正在制造学术垃圾”的心态，于是本科的恩师开导我：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“你是研究生了，要养成对学术水准的品味能力”。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我们母校比较普通，对大部分同学来讲，就是应付考试顺利拿到学位证书。没想到自己竟然遇到了一个哈佛博士毕业的退休教授，他教会了我“科学家在做什么”。所幸懂一点研究的皮毛，会看论文，却从来没想过品味的问题。&lt;/p&gt;
&lt;p&gt;给大家推荐一篇今年 1 月 14 日发表于《ACS（American Chemical Society）Nano》的论文——《Will Any Crap We Put into Graphene Increase Its Electrocatalytic Effect?》。&lt;/p&gt;
&lt;p&gt;不知道朋友们的英文阅读水平怎样，想吃这个瓜还是先把题目看懂。&amp;ldquo;Crap&amp;quot;翻译为&amp;quot;废物；屎（粪便）&amp;quot;，我也挺喜欢 DeepTech 报道里的表达方式——&amp;ldquo;啥玩意儿&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;我们可以把题目直译为&amp;quot;是否我们在石墨烯中掺杂任何废物都能够增加它的电催化作用呢&amp;rdquo;，或者&amp;quot;是不是往石墨烯里随便加点啥玩意儿都能提高其电催化活性&amp;quot;。&lt;/p&gt;
&lt;p&gt;本人只是个接触了一点海洋生物学的本科生，可能读材料的同学会比较了解吧。&lt;/p&gt;
&lt;p&gt;肤浅地了解到《ACS Nano》影响因子 12+，中科院一区，有人会把它当作《Nature Communication》的备胎，拿被 NC 拒稿的文章来转投。再看一下第一单位——多伦多大学（University of Toronto），加拿大排名第一的学校。&lt;/p&gt;
&lt;p&gt;看来不是胡闹。&lt;/p&gt;
&lt;p&gt;拜读第一自然段，这绝对是我看过最骚气的 Introduction。&lt;/p&gt;
&lt;p&gt;科技论文的标准写法，上来先交代这个领域的研究背景，从别人的研究写到自己的研究，从相似写到创新，最后上升到研究意义社会影响完美结尾。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The doping of graphene with a plethora of elements has been reported as enhancing its electrocatalytic performance.&lt;/p&gt;
&lt;p&gt;It has become almost a paradigm that the once fantastic graphene for electrocatalysis is not so fantastic anymore and that we need to add something to it (i.e., a dopant) to make it great again.&lt;/p&gt;</description></item><item><title>新春还是新冠之春</title><link>https://touchingfish.top/2020/lockdown-diary/</link><pubDate>Thu, 20 Feb 2020 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2020/lockdown-diary/</guid><description>&lt;p&gt;新冠疫情发生后的家里蹲日记。关于与自己、与家人相处。&lt;/p&gt;
&lt;p&gt;总是有种对爸妈拌嘴的恐惧。也许这些年的生活对我的阴影还是蛮大的。不过感谢上帝，最近家里还算和平。偶尔要听妈妈唠叨几句。&lt;/p&gt;
&lt;p&gt;晚上在看血糖仪的说明书。发现妈妈在阅读上有些障碍。或许是现在太多新词汇的出现，影响了她的理解——难怪我们要做那么多「名词解释」的考试。给妈妈的手机装了一些 app。观察几日，想她能对信息传播方式有现代化的认识。既能从报纸收音机到电视电影，也应该能从电视新闻到手机热搜。&lt;/p&gt;
&lt;p&gt;发现没有，自己时常忘了不好的事情。不记仇？妈妈给我上了重要的一课：我的话语权在自己手里，即使这是当了20年&amp;quot;小弟&amp;quot;的「因果」。还有，不要求别人当&amp;quot;完人&amp;quot;。&lt;/p&gt;
&lt;p&gt;最近，妈妈正式从小学教师下岗。她一直以代课教师的身份工作，早到了退休年龄。原先给她提供职位的校长也去别的学校上任了。回家休息养老，是早晚的事。&lt;/p&gt;
&lt;p&gt;我爱观察，尤其是观察人。观察到妈妈对「退休」的反应，还有亲朋们一个接一个的慰问电话，让我明白这对她来说并不是件小事。&lt;/p&gt;
&lt;p&gt;失去了正式工作，可能有失去生活经济来源的焦虑，有对生命衰老和功能下降的恐惧。肯定也有对这个整天只是坐在家里，连生命的意义都找不到的儿子的担忧。&lt;/p&gt;
&lt;p&gt;直到那天出门散步，她那一句&amp;quot;我们要相互支持&amp;quot;的话——才真正地冲击到我的心灵。&lt;/p&gt;
&lt;p&gt;家人身体状况很差。倍感啃老骂名和经济压力之大。&lt;/p&gt;
&lt;p&gt;投了两份简历。没有回音。&lt;/p&gt;
&lt;p&gt;我想做点事情，证明自己能够做到饿不死。&lt;/p&gt;
&lt;p&gt;时常读书学习，确实能帮我克服焦虑。包括这几天对求职意向和职位要求的思考越来越明确。&lt;/p&gt;
&lt;p&gt;我不过是想，不需要把工作&amp;quot;带在身上&amp;quot;。如果工作地点距离有点远，则希望交通便利。不知道算不算过分，但我是廉价劳动力啊。一些我更倾心的岗位，以我的履历并不会被考虑。&lt;/p&gt;
&lt;p&gt;常常对自己的定位不是很明确——乐观一点来看。对现在的我来说，做一份中专大专也能胜任的技术员工作也许蛮好的。周末的话，如果稍微搁置学习计划，可以做做兼职。同时拥有几个身份是一件有意思的事情。多做点不同的工作也是。&lt;/p&gt;
&lt;p&gt;某个失眠的夜晚，回想了当时美丽中国的面试。可能是自己无意识的吹牛露怯。因为认识的肤浅、能力的缺陷，让说出来的话显得夸夸其谈。&lt;/p&gt;
&lt;p&gt;当时，我以为对从事行业的幻想是一种职业规划。直到后来，在惠安的宿舍里，重新地打量自己的未来，才明白——假装自己有&amp;quot;明确的职业规划&amp;quot;，是一个笨拙且粗糙的谎言。&lt;/p&gt;
&lt;p&gt;职业是工作、事业还是使命（天职）？这才是我该面对的真正问题。也许我的情况该选择工作或者事业，带给我经济基础。即使天职才是我梦寐以求的，却又需要经济基础来支持。&lt;/p&gt;
&lt;p&gt;收到了一个像样的面试机会。公司业务和岗位职能暂且符合我的预期。按照以前的态度，定是会认真准备，提前预习好了上岗所需的基础知识，并把简历润色打造为意向明确、满足需求的特色版。&lt;/p&gt;
&lt;p&gt;前一天拿出久违的旧简历，却并没有热情重新去打印新版。改动不大，无伤大雅。色谱的基础我也都学习过。实际上这项职能的门槛并不高，培训之后上岗是能够胜任的。&lt;/p&gt;
&lt;p&gt;而且做足准备却事与愿违的感觉，会让失望放大。我并不是非这份工作不可。带给我快乐的是做真实的自己。&lt;/p&gt;
&lt;p&gt;所以，我选择去了解值得关心的：加班和双休，行规和文化。没有明确说明双休的工作，其实并不在我第一考虑的范围内。看了一些值得怀疑的评价，于是思考出一些敏感的问题：&lt;/p&gt;
&lt;p&gt;加班的工资？离职的原因？有没有潜规则？&lt;/p&gt;
&lt;p&gt;适当地打退堂鼓。&lt;/p&gt;
&lt;p&gt;这个机会给了我对真实需求的思考，以及一个睡眠规律暂且合理的夜晚。第二天，因为招聘软件定位的诡异，差点走错了方向。到达面试地点的楼下后，对这座小城的失望又多了一点，索性用短信回绝了邀请。&lt;/p&gt;
&lt;p&gt;我只是一个想要认真生活的普通人。普通到觉得每个月有点固定收入也改变不了现状，普通到就算时间倒转十年一百次也可能没办法成功地实现自己的理想。&lt;/p&gt;</description></item><item><title>全国都在放寒假</title><link>https://touchingfish.top/2020/binge-lockdown/</link><pubDate>Fri, 07 Feb 2020 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2020/binge-lockdown/</guid><description>&lt;p&gt;晚上看了《死亡诗社》。&lt;/p&gt;
&lt;p&gt;尼尔的死打动了我。心情悲伤又复杂，甚至忘了去思考背后的原因。&lt;/p&gt;
&lt;p&gt;基廷老师的教育真的有问题吗？&lt;/p&gt;
&lt;p&gt;看着老师在尼尔被佩里先生带走时的无奈，让我想起恩师。最后一个学期，总能觉察到他的失望和失落——那种未能给我们更多学习和实验的机会的无奈和愧疚，让我觉得他是真心为学生好的老师。&lt;/p&gt;
&lt;p&gt;现在突然明白，在我向他倾诉和最终选择退学的时候，为什么他会选择用对我&amp;quot;放心&amp;quot;来回复。&lt;/p&gt;
&lt;p&gt;从他身上学到了治学的谦逊和热情。&lt;/p&gt;
&lt;p&gt;现实主义和悲观主义（犬儒主义）画上等号？可能是东亚社会某种根深蒂固的价值观荼毒的结果。&lt;/p&gt;
&lt;p&gt;难以想象自己几小时前还在挣扎&amp;quot;何必跟钱过不去&amp;quot;的问题。希望这和保持自我、把握当下不要有什么违背。&lt;/p&gt;
&lt;p&gt;我愿走出去结交更多&amp;quot;社团&amp;quot;成员。&lt;/p&gt;
&lt;p&gt;前两天沉迷于《绝代双骄》。&lt;/p&gt;
&lt;p&gt;一是因为在电视上看过一点，二是觉得尼尔的演员跟胡一天有几分相似。我所了解的古龙，总是那不堪的一面。即使自认为算是武侠爱好者，也无意去翻看他的作品。&lt;/p&gt;
&lt;p&gt;这一版号称还原度极高的电视剧，竟然让我想要把原著好好看看。&lt;/p&gt;
&lt;p&gt;没想到自己会对铁心兰的三角恋蛮有兴趣。&lt;/p&gt;
&lt;p&gt;于是从《非正式会谈》聊过的「原著党」问题开始一通胡思乱想。&lt;/p&gt;
&lt;p&gt;坚持读书已有月余，但还是谈不上爱阅读。文学作品影视化越来越多，一直佩服能把原著反复阅读的人。想要当回原著党，可时间从何而来？&lt;/p&gt;
&lt;p&gt;原来人们度过青春的方式如此不同。&lt;/p&gt;
&lt;p&gt;我若决定追求知识，又怎能让「一时兴起」来占用我的时间。而这些爱好不也是我快乐的本源吗？今日的思考倒有一个暂时的答案：爱好应该是终生的，虽然学习也是，但机会却是当下的。&lt;/p&gt;
&lt;p&gt;看完了《绝代双骄》。&lt;/p&gt;
&lt;p&gt;收获了一首好歌——&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;做不成顶天立地大英雄，只要打不过就，躺下不动。你不懂玩世不恭的苦衷，侠义藏心中。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;想过得像小鱼儿一样精彩洒脱。&lt;/p&gt;
&lt;p&gt;心里的包袱却像花无缺一样沉重。&lt;/p&gt;</description></item></channel></rss>