分享好友 最新动态首页 最新动态分类 切换频道
干货 | 如何系统学习 C 语言?
2024-12-25 18:32

关注、星标公众号,直达精彩内容

  • C 语言应该是绝大部分同学的编程第一课。

  • 对于非 CS 专业的同学,学 C 语言主要是掌握一些基本的编程方法,C 语言只是媒介。

  • 但是对于 CS 科班的同学,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 语言举个例子

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

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

为什么二级指针就要两个

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

这个阶段你需要三份资料

  • 一是补 CS 基础概念,也就是计算机导论

  • 二是一本 C 语言的好书。

  • 三是一个优质的 C 语言视频

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

  • 计算机导论

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

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

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

而不是在教 C 语言。

  • C 语言视频

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

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

  • C语言书

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

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

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

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

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

  • 链表

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

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

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

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

  • 写点小东西

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

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

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

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

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

  • 深入学习指针

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

  • 编译、链接

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

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

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

  • 汇编

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

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

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


好了,今天的 C 语言学习之路就到这里了,其实还有很多东西没提,比如 Linux C 方向的。

主要为了突出学习 C 语言本身,不想喧宾夺主,让大家迷失了方向。

有需要的可以点击下方公众号,关注后回复「C语言」即可。

最新文章
路由优化大师官方版 v4.5.32
  路由优化大师官方版是一款可以帮助用户更好的管理路由器的软件,为大家提供路由优化大师官方版下载、路由优化大师官方版软件介绍与路由优化大师官方版使用心得,该软件提供多种路由器的设置服务,让你更好的使用路由。  路由优化大师
网站排名在线优化工具:提高网站曝光率,轻松打造流量王者
欢迎了解SEO相关知识,图片中使用工具为:“147SEO工具”在互联网时代,网站的排名决定了品牌的曝光度,而曝光度又直接关系到网站的流量、用户的转化率和企业的盈利能力。无论是个人网站,还是企业官网,想要在激烈的竞争中脱颖而出,拥有
多地提醒:不必囤!
日本宣布于今日启动福岛核污水排海,引发全球广泛关注,部分市场出现食盐抢购现象。有消费者对日本核污水排海对广东省食盐供应安全的影响心存担忧。广东盐业集团相关负责人介绍称,目前,省、市两级食盐政府储备量和企业社会责任储备共10.8
调试了一天终于掌握结构化提示词精髓,大模型返回的数据即准确又稳定(快速收藏!)
在人工智能的探索中,结构化提示词犹如一盏明灯,指引着AI理解并回应我们的需求。 本篇文章主要大家探讨一下结构化的概念、重要性以及如何通过精心设计来优化AI对话和输出的质量。 通过这篇文章,希望能够帮助大家更有效
洪殿街道SEO常见术语合集
这些术语对普通用户来说,基本上用不到,但对于SEO人员来讲,熟悉SE0术语会有助于帮助我们更好地理解SEO。网站分类目录:网站分类目录是人为编辑的搜索结果,即将互联网上较为优秀的网站收集整理在一起,按照不同的分类或者主题放在相应的
www.0371com.cn
通过本工具可以快速查询到您站点的谷歌(www.google.com)、百度(www.baidu.com)、必应(cn.bing.com)、雅虎(cn.yahoo.com)、搜搜(www.soso.com)、搜狗(www.sogou.com)、有道(www.youdao.com)等搜索引擎收录情况及反向链接;可以快速查询到谷
营口企业网络曝光新动力,搜狗SEO助力抢占市场先机
营口搜狗SEO推广服务助力企业提升网络曝光,抢占市场份额。通过专业SEO策略,优化企业网站,提高搜索引擎排名,增强品牌影响力,助力企业实现网络营销目标。随着互联网的快速发展,企业纷纷投身于线上市场竞争,在众多搜索引擎中,搜狗凭借
已满十八岁从此进入戴好耳机的电影时代网友:让声音环绕你带来前所未有的观影享受!
当你已满十八岁,进入一个更加自由和独立的阶段,电影已经不仅仅是视觉的享受,声音的体验同样重要。已满十八岁从此进入戴好耳机的电影时代已经成为许多人观影的新习惯。耳机不仅带来了高清晰度的音效,还可以将你完全包裹在电影的世界里,
网站建设的基本流程包括哪几个方面内容和方法,深入执行方案数据_OP98.35.88
摘要:,,网站建设基本流程涵盖多个方面,包括需求分析、网站规划
Prompt 工程
“预训练-提示预测”范式是近年来自然语言处理(NLP)领域的一个重要趋势,它与传统的“预训练-微调-预测”范式相比,提供了一种更为灵活和高效的模型应用方式。 Prompt工程是指在预训练的大型语言模型(如B
相关文章
推荐文章
发表评论
0评