[Update] 如何学习 C 语言? | 语言 – Pickpeup

语言: นี่คือโพสต์ที่เกี่ยวข้องกับหัวข้อนี้

作为一名写了好几年 C 语言,也给很多留学生讲过 C/C++ 的学长来回答下吧。

我用 C 语言写了很多小工具,比如malloc、free,挂载到fuse上的filesystem,简易版svc等等。

总的来说,有上万行以上吧,对于指针、内存这些C语言关键点,也还算掌握得不错。

跟着我的方法学习,C语言一定没问题~~

之前出过很多学习路线的回答,有操作系统的、有 C++ 的,不少同学已经催了我几次了,让我讲下 C 语言怎么学。

首先,送大家一份我整理的包含几十本经典 C/C++ 电子书大全合集:

获取方式可以看看这篇文章,附带了电子版的PDF下载链接,赶紧收藏起来吧:

C/C++必读书籍推荐| 附下载方式

再老生常谈下,强调下 C 语言的重要性哈:

  • C 语言应该是绝大部分同学的编程第一课。
  • 对于非 CS 专业的同学,学 C 语言主要是掌握一些基本的编程方法,C 语言只是媒介。
  • 但是对于 CS 科班的同学,C 语言是后续的计组、体系结构、操作系统、编译原理等课程的基石,对于 C 语言本身甚至程序设计语言基础原理的深入理解都是应该掌握的。

对于大部分初学者,学习C语言的目的是希望做一名合格的程序员,开发出靠谱的软件来。但是学了C语言的基本语法后,发现只能开发“黑底白字”的DOS程序,完全没有漂亮的界面和生动的交互。于是学数据结构,学算法,学操作系统,越陷越深,越来越难,最后迷茫了,不知道学C语言能做什么,认为学习编程很难,开始怀疑自己,甚至想放弃。

其实,这是很多初学者都会踩到的一个坑!C语言本身是一门很简单的语言,提供的实用功能不多,大部分要借助操作系统、第三方库、单片机来完成。也就是说,只学C语言基本什么也做不了,也基本找不到工作。

C语言是一门通用性的语言,并没有针对某个领域进行优化,在实际项目中,C语言主要用于较底层的开发,例如:

  • Windows、Linux、Unix 等操作系统的内核90%以上都使用C语言开发;
  • 开发系统组件或服务,用于支撑上层应用;

既然C语言的应用这么多,为什么很多读者觉得它什么也做不了呢?

我们先说一个概念,就是库(Library)。库就是编程专家写好的代码,我们可以拿来直接使用,这样能够节省开发成本,提高开发效率,并且库代码的执行效率、严谨性、安全性和规范性要明显优于我们自己编写的代码,市场上有很多优秀的库,有的收费,有的免费,我们要善于利用这些库,尽量不要重复造轮子。

库一般分为两种:

  • 编程语言的开发者在开发编程语言的时候,一般都要预先写好常用的代码,或者说常用的功能,例如输入输出、数学计算、文件操作、网络操作、日期时间、错误处理、字符串处理等,这些由官方编写的库称为标准库(Standard Library),它们随编程语言一起发布,可以认识是编程语言的一部分。
  • 有一些组织机构或者个人也会开发一些库,有的是为了盈利,有的是业余爱好,有的是本公司正在使用的代码,开源出来造福人类,这些库称为第三方库(Third-party Library)。

如何学习?

一、一图胜千言

如果你不想看冗余的文字,直接看我画的这个思维导图即可:

二、C 语言易学难精?

很多同学都反映 C 语言难。

实际上,相比 C++、Java 之类的更加现代的语言, C 语言本身的语法特性非常少,不像 C++ 成了一锅大杂烩。

C 语言本身只包含了编程语言最基本的语法,比如变量、if、else、for、while、枚举、结构体等,外加一个指针。

但是为什么大家都觉得难呢?

说下我大一时觉得难的原因吧,主要两点:

1. 库太少,太原始

用 C 语言写个稍微复杂点的项目,你需要上来先把数据结构、常见算法先实现一遍,更别说字符串,序列化这些了。

比如 Redis 里 SDS、LIST、ZSET、HASH等。

这其实对新手极其的不友好。

想做点有趣的东西,来,先写个链表?

而在 Java 里直接 New 一个 LinkedLits、HashMap,简直不要太高效。

再到后来,学了 Python,才发现这才是编程的高级形态,写个爬虫直接 import xx,几句话就完事了。

而在 C 语言里,你需要裸写 Socket 发网络包,还要解析 HTTP 协议,还要序列化 JSON,处理 HTTPS 这些(当然,你也可以导入库,但是由于 C/C++ 弱鸡等同于没有的包管理,也挺麻烦的。

这就是新手学 C 容易被劝退的原因,做不出好玩的东西,全是一堆黑框框。

2. 内存、指针

另外,常另 C 语言初学者感到头疼的就是指针了。

指针其实本身不难,就是变量的地址嘛。

但是问题在于地址是个什么东西?

理解地址,就需要理解内存,但是鉴于大多数同学学习 C 语言,都是在大一,那时候没有计算机基础知识,其实理解起来还是稍微吃力的。

内存,其实也很简单啊,你就把它当做一个黑盒,提供了读和写的能力。

就像快递柜一样,提供了存东西、放东西的能力:

读哪里?写哪里?

当然是需要地址啊,地址就跟快递柜上的编号一样,而快递柜格子里就相对于内存中真正存放的内容。

记住这张快递柜的照片,其实指针你就理解了。

什么是二级指针?

就是快递柜格子里放的是另外一个格子的编号,对应到 C 语言举个例子:

int a = 10;
int *pa = &a;
int **ppa = &pa;

ppa 所指向的内存存放的内容是 pa 的地址,pa 存放的是 a 的地址(就不画图了,脑补

那你要问了,那指针和二级指针以及更多级的指针有什么区别呢?

READ  [Update] BOURGEOIS | 池沢美緒 - Pickpeup

为什么二级指针就要两个**

很简单啊,不用两个 ** 的话,你怎么告诉编译器,这个地方放的其实是另外一个内存的地址?

这样编译器才能去做语法检查,不然谁知道你这是放的变量地址还是另外一个指针的地址啊。

更加详细的内容其实我在这篇指针的文章中讲过:

为什么指针被誉为 C 语言灵魂?

不过现在站在我的角度,觉得指针很简单,似乎很好理解,也许是知识诅咒的原因。

知识诅咒:指的就是一旦我们自己知道某样东西,我们就会发现很难想象不知道它的时候会是什么样子。

后来接触到 Java,如同发现了新大陆一般。

在 C 语言里,申请一个内存,你得随时记得在合适的地方释放。

释放得不合适? 对不起 coredump 随时等着你。

忘了释放? 对不起,内存泄露等着你~

乱写指针?对不起,内存越界等着你~

栈内存越界?VS下,烫烫烫等着你~

这些东西想必是每一位 C Programmer 的家常便饭了。

而在 Java 这类更加高级语言中,直接 new 一个就行了。

好了,扯淡完毕,在这里给出一条系统化学习 C 语言的路线吧:

第一阶段:初学少看书,多看视频

这真的是血泪教训,我大一会傻乎乎的去把课本看一遍,然后做课本后面编程练习题。

学得那叫一个艰难呀,大家都知道,课本为了保留其严谨性和全面性,往往都具有一个特点,那就是「不说人话」。

对于 C 语言,初学者有一个难点需要克服,就是容易遇到各种编译、链接错误,而且不知道怎么解决:

比如这种很初级的报错,但是初学者往往看到就慌了。

遇到这种情况,我的建议是仔细读报错的提示,解决方法往往就在这些 note 中,如果实在解决不了,就复制 note 去 Google 上搜。

这个阶段你需要三份资料:

  • 一是补 CS 基础概念,也就是计算机导论
  • 二是一本 C 语言的好书。
  • 三是一个优质的 C 语言视频

对于每一点,我都只推荐一份我觉得最合适的,避免你陷入选择困难症:

  • 计算机导论

CS 50,这是哈佛的一门计算机入门神课,忘了是在大一下还是大二看的了,当时觉得如获至宝。 链接如下:

https://cs50.harvard.edu/college/2021/spring

让我现在还记忆尤新的一个点,是这个老师讲到 binary search 的时候,直接举了查字典这个过程,然后现场手撕字典。。。

另外,这门课是用 C 语言作为教学语言的,非常难得。

因为现在国外很多 CS 名校的导论课都会采用类似 Python、Schema 这样的语言。

但其实你会发现,在 CS 50,不会讲多少 C 语言的语法,C 语言只是作为一种传递编程思想、引领你入门计算机的媒介。

而不是在教 C 语言。

  • C 语言视频

不多说了,推荐一个我以前在地铁都在刷的,浙大翁凯老师教授的,直接去中国大学 MOOC 搜索即可,这是链接:

https://www.icourse163.org/course/ZJU-199001

说到这,我不得不多说两句翁凯老师了,我看了好几门他的课,最直观的感受是:

讲解透彻、声音好听,而且特别注重细节,贴一张浙大匿名教室系统关于翁凯老师的评价吧:

一句话,翁凯老师是真的想把计算机内部原理、编程语言以深入浅出的方式教给大家。

  • C语言书

《C程序设计语言》,一本被称作 C 语言圣经的书。

在短小的篇幅中,涵盖了 <stdio.h>、<string.h> 中的大部分例子,习题也都是经典,从 hello world 开始,到二分查找、二叉树、快排、哈希表等,甚至还用递归下降写了词法分析,帮你理解复杂的声明。

不过要看懂里面的每一个例子,也是有一定难度的,需要有一点点基础,但是不妨碍作为入门书,可以多看几遍。

对了,一直说学编程要多写,但是很多初学者也不知道写什么。

在这里,我给出一些学完 C 语言基本语法后,可以练手的例子:

  • 链表

就用 C 语言把链表翻来覆去的写,从最基本的链表插入、删除、单向、双向、环装链表。

到链表反转、合并、分割等。

别看基础,但是很多同学到大四了,可能都写不对,这里考察是否足够细心、逻辑是否缜密。

会不会操作着就把链给断了。

  • 写点小东西

比如图书管理系统、俄罗斯方块、贪吃蛇之类。

这种代码量大多在 500 – 1000,会综合运用函数、文件操作、动态内存、指针这些关键的东西。

第二阶段:搞懂内存,看书、写代码

这个阶段,是需要掌握一些计算机系统知识才能学好的,比如虚拟地址就和操作系统相关了,而函数调用栈这些又和汇编相关。

又比如很多学了很久的同学,还不太清楚变量的声明和定义区别,extern 又有什么作用,这些实际上就需要理解内存分区的东西。

C 语言的核心就在于指针、内存,能不能学好、用好 C 语言,更多在于是否拥有扎实的计算机结构、存储、运算原理方面的知识。

所以强烈建议在学习 C 语言的同时去了解一下补码、数的二进制表示、内存、汇编等知识,尤其是内存和汇编,这两个对于深刻理解指针和熟练运用有很大的帮助。

我就不仔细介绍了,要介绍的书都在这张思维导图里了。

  • 深入学习指针

《C和指针》、《深入理解C指针》,真的是涉及指针方方面面的好书,墙裂推荐。

  • 编译、链接

这俩兄弟懂了其实也不能帮你提高写代码的水平,主要是对于一些编译、链接过程的报错,更加的明确,不至于懵。

比如链接过程中常见的错误是符号未找到(undefined reference)和符号重定义(redefinition)

当你熟悉链接过程,符号查找过程之后,解决对应的报错也会得心应手。

  • 汇编

C 语言之下就是汇编,会汇编,你就能直接把 C 语言衣服扒掉,看看背后的实现,比如大家都在讨论数组和指针有什么区别?

你去写个程序,然后 gcc -S 一下,看下汇编代码,你就会发现没啥区别。。。

汇编不需要会写,会看懂部分记得,大可不必去刻意的记住各种指令、寻址方式。


另外,我推荐的这些书籍,我也都汇总了:

可以在这里下载,都包含在里面了:

这一套学完,C 语言基本问题不大。

有需要的可以点赞后在评论区留言,我发给你~~

记得帮我 @编程指北 点个赞哟~~

READ  [NEW] Rafael Palmeiro Stats, Fantasy & News | 라파엘 팔메이로 - Pickpeup


真·语言天才王嘉尔,韩粤英汉四大语言切换自如,毫无障碍,简直是个小天才!


真·语言天才王嘉尔,韩粤英汉四大语言切换自如,毫无障碍,简直是个小天才!

นอกจากการดูบทความนี้แล้ว คุณยังสามารถดูข้อมูลที่เป็นประโยชน์อื่นๆ อีกมากมายที่เราให้ไว้ที่นี่: ดูความรู้เพิ่มเติมที่นี่

真·语言天才王嘉尔,韩粤英汉四大语言切换自如,毫无障碍,简直是个小天才!

纯享 | 被徐志胜笑死!爆梗频出拿下全场最高分【脱口秀大会S4 ROCK\u0026ROAST】


▶马上下载\”Tencent Video\”官方APP 看更多精彩集数 Watch more episodes on \”Tencent Video\” APP https://wetv.info/us
▶订阅\”腾讯视频热播综艺\”观看精彩正片 https://bit.ly/JoinTencentVariety
▶加入会员 Join Membership http://bit.ly/JoinTencentVideo
《脱口秀大会S4》第四季定位为一档原创棚内喜剧脱口秀竞演节目。来自各行各业的脱口秀选手根据每期节目话题,以不同的视角切入、用专业的喜剧创作能力进行高质量的内容输出,诠释“从行业走向生活”的价值主张;新老演员同台较量,争夺年度“脱口秀大王”桂冠。
⚡️观看精彩剧集⚡️
♥《你是我的荣耀》:https://bit.ly/3Bo01EI
♥《我的女主别太萌》:https://bit.ly/3kLcCfk
♥《千古玦尘》:https://bit.ly/35rwOKz
♥《海上繁花》:https://bit.ly/3vVNJzx
♥《陪你到世界终结》:https://bit.ly/2SdJ3Y2
♥《双世宠妃3》:https://bit.ly/3pkyLSh
♥《我和我的时光少年》:https://bit.ly/3yL3ADZ
♥《雁归西窗月》https://bit.ly/3v2FlyB
♥《我的漂亮朋友》:https://bit.ly/33C74Kj
♥《遇龙》:https://bit.ly/3f3BISn
♥《乌鸦小姐与蜥蜴先生》:https://bit.ly/3sC5EcT
♥《御赐小仵作》:https://bit.ly/3aKduLD
♥《原来你是这样的顾先生》:https://bit.ly/3lSfdTu
♥《锦心似玉》:http://bit.ly/37B7eE7
♥《斗罗大陆》:http://bit.ly/2YNAhzO
♥《我的小确幸》:http://bit.ly/3olfqyG
♥《燕云台》:https://bit.ly/3oUieDF
♥《甜了青梅配竹马》:https://bit.ly/36N8aFW
♥《我,喜欢你》:https://bit.ly/33rJEXG
♥《传闻中的陈芊芊》:https://bit.ly/36dqmWY
♥《三生三世枕上书》:http://bit.ly/3amlwZb
♥《陈情令》:http://bit.ly/2xr53kg
♥《致我们暖暖的小时光》:http://bit.ly/tcshoulder
♥《龙日一,你死定了S1》:http://bit.ly/tcdragon
♥《狐狸的夏天S1》:http://bit.ly/tcfox1
🚀更多火爆综艺🚀
♥《心动的信号S4》:https://bit.ly/3vXtQYN
♥《拜托了冰箱轰趴季》:https://bit.ly/3wV5JeM
♥《五十公里桃花坞》:https://bit.ly/3wKaibx
♥《吐槽大会S5》:https://bit.ly/3r70vt0
♥《德云斗笑社》:https://bit.ly/2EBuoPF
♥《脱口秀大会S3》:https://bit.ly/3jT0Fl4
✨观看更多精彩动漫✨
♥《魔道祖师完结篇》:https://bit.ly/3AsrTWX
♥《斗罗大陆》:https://bit.ly/3780Y7x
♥《穿书自救指南》:https://bit.ly/3k0Txmq
♥《全职高手S2》:https://bit.ly/3lL9sFW
🔒马上订阅更多官方频道🔒
☞ 腾讯视频: http://bit.ly/wetvnew
☞ 腾讯视频动漫:http://bit.ly/wetvanime
☞ 腾讯视频热播综艺: https://bit.ly/wetvshow
☞ 腾讯视频华语经典剧场: https://bit.ly/wetvdrama
☞ 企鹅大影院: https://bit.ly/wetvmovie
☞ 创造营 CHUANG2021: http://bit.ly/CHUANG2021
☞ WeTV 台灣: http://bit.ly/wetvtw
☞ WeTV Thailand: http://bit.ly/wetvthaisub
☞ WeTV Indonesia: http://bit.ly/wetvinsub
☞ WeTV Vietnam: http://bit.ly/wetvvisub
☞ WeTV English: http://bit.ly/wetveng
☞ WeTV Arabic: http://bit.ly/wetvarab
☞ WeTV Spanish: http://bit.ly/wetvesp
☞ WeTV Korea: http://bit.ly/wetvkr
☞ WeTV Turkish: https://bit.ly/wetvtur
☞ WeTV Russian: https://bit.ly/wetvrus
☞ WeTV Portuguese: https://bit.ly/wetvptbr
☞WeTV Japan: http://bit.ly/wetvjapan
脱口秀大会S4 脱口秀大会第四季 腾讯视频

纯享 | 被徐志胜笑死!爆梗频出拿下全场最高分【脱口秀大会S4 ROCK\u0026ROAST】

【美国】达娜·萨斯金德等《父母的语言》2015年出版(上)


READ  [NEW] FaOIファンタジーオンアイス2016のチケット速報【幕張・札幌・神戸・長野】 | fantasy on ice 神戸 - Pickpeup

【美国】达娜·萨斯金德等《父母的语言》2015年出版(上)
0:00 父母的语言(上)
0:24 父母的语言:3000万词汇塑造更强大的学习型大脑
2:03 小楼老师推荐序
9:35 译者序
19:02 第一章:缘分,我的故事
36:45 第一章:扎克和米歇尔
55:14 第一章:语言环境与学习水平
1:12:50 第二章:父母语言的力量
1:26:11 第二章:三千万词汇差距初现
1:41:47 第二章:研究结果可信吗?
1:57:22 第二章:信念差距和成就
2:06:06 第三章:神经可塑性:二胎大脑的后天发育
2:19:25 第三章:神经可塑性:父母应尽量增强儿童脑回路构建
2:31:30 第三章:神经可塑性:时机决定一切
2:45:58 第三章:神经可塑性:我们都曾是计算天才
2:59:51 第四章:语言的力量:从思维能力到人生观
3:17:18 第四章:语言的力量:为什么有的人觉得容易,有的人觉得难呢?
3:34:17 第四章:语言的力量:性别差异,细微的影响如何产生作用
3:47:17 第四章:语言的力量:动力与决心
4:04:35 第四章:语言的力量:学习的三大要素
4:17:44 第四章:语言的力量:自我对话
4:36:44 第四章:语言的力量:同情心与道德观
深夜读书
深夜讀書
有声书
有聲書
自我成长
自我成長
枕边书
枕邊書

【美国】达娜·萨斯金德等《父母的语言》2015年出版(上)

直击灵魂,四国语言翻唱《海底》


录制:九宝 莫娜 Elin 之子
策划参与\u0026视频\u0026:Elin
全曲和声:Elin
想法:九宝
韩文\u0026英文填词:蕾蕾
英文填词校对:莫娜
日文填词:阿雯

直击灵魂,四国语言翻唱《海底》

The Kid Who Speaks 12 Languages


Thank you for watching Nas Daily. Make sure to subscribe here and on Instagram I have a LOT more interesting videos in the making!
At the end of the day, Nas Means People. And I want to show you the stories of People from all around the world.
Also, if you want to learn how to make videos like me, check out Nas Academy bit.ly/NasAcademy

The Kid Who Speaks 12 Languages

นอกจากการดูบทความนี้แล้ว คุณยังสามารถดูข้อมูลที่เป็นประโยชน์อื่นๆ อีกมากมายที่เราให้ไว้ที่นี่: ดูวิธีอื่นๆMusic of Turkey

ขอบคุณมากสำหรับการดูหัวข้อโพสต์ 语言

Leave a Comment