C语言到底怎么学?
大家好,我是良许。
作为一名嵌入式工程师,C 语言是一门我们必须要掌握的开发语言。
我是在 2007 年的时候(大一)第一次学习 C 语言,但那时候学得很差,只考了 64 分。而在后面我再也没用过这门语言,因为我是学机械的。
在 2014 年我研究生毕业的时候,为了转行嵌入式,我再次学习了 C 语言,并且之后它就成了我工作的主语言。
直播间经常有小伙伴问我 C 语言到底应该怎么学,作为两次学过 C 语言的人,并且使用它工作长达 10 年,我还是有一些心得可以分享给各位小伙伴。
接下来,我将从 开发环境、学习路线、学习网站、实用书籍、推荐课程 等几方面,跟大家详细介绍我的学习心得,欢迎各位同行一起交流!
1. 开发环境
俗话说,工欲善其事必先利其器,选择一个合适的开发工具来学习 C 语言至关重要。
2007 年我第一次学习 C 语言的时候,使用的是 Turbo C 这种老古董。现在有很多非常优秀而且更高效的开发工具,就不太推荐 Turbo C 了。
我第二次学习 C 语言的时候是自学,使用的是 Visual Studio ,这款开发软件现在依然保持更新,对于学习 C 语言非常有帮助,大家可以考虑。
当然,现在还有很多其它非常优秀的工具,比如 Dev C++ 或 VSCode 等。偷偷告诉大家,我最近也迷上了 VSCode 了哦~
当然,如果你的学习能力比较强的话,可以直接在 Linux 系统里,使用 Vim 写代码,然后再用 gcc 编译。这种开发方式要求非常高,不仅没有图形界面,而且也不方便调试,不太建议初学者采用。
2. 学习路线
很多同学说 C 语言很难,实际上,C 语言是被大学里的老师给教难的。高校里的老师大多都是念 PPT 的,甚至连上机的时候都是拿现成的代码直接讲,敢于课堂上一行一行撸代码的少之又少。
C 语言其实并不难学,大家只需要按以下的学习路线学习就行了。
当然,对于初学者来讲,指针、数组、结构体等等这些比较抽象的概念,确实一时半会儿不太好理解。但是,只要勤加练习,多写代码,多做项目,慢慢的大家都会从菜鸟变成老鸟的。
2.1 基础语法
入门第一步,掌握C语言基础语法,它包括数据类型、变量常量、输入输出、运算符、控制结构等内容。为更深入的学习打下基础。
-
数据类型 :除了基本的 int、float、char 等,还有 long、short、unsigned、signed 等。
-
变量常量 :变量声明与初始化,常量定义等。
-
输入输出 :使用
printf
和scanf
进行基础输入输出。 -
运算符 :如算术运算符(+、-、*、/)、关系运算符(==、!=、>、<、>=、<=)等。
-
控制结构 :如if语句、while循环、for循环等。
2.2 函数和程序结构
理解 C 语言函数的概念,掌握如何定义和调用函数,理解函数的作用域和生命周期。同时,理解 C 语言程序的基本结构,包括 main 函数和其他函数的关系。
-
函数声明 :理解函数的作用域,局部变量和全局变量的区别。
-
参数传递 :理解值传递和引用传递。
-
返回值 :如何从一个函数返回一个值。
-
递归函数 :如何使用函数调用自身。
2.3 数组和指针
数组是 C 语言中用于存储同一种类型数据元素的数据结构。指针是 C 语言的另一个重要特性,用于存储变量的地址。掌握数组和指针的基本概念和操作是深入学习 C 语言的关键。
-
数组的声明和初始化 :如 int arr[5] = {1, 2, 3, 4, 5};
-
指针概念 :指针是一个变量,存储的是另一个变量的地址。
-
动态内存分配 :使用
malloc
、calloc
和free
进行内存管理。 -
指针运算 :如何对指针进行加法和减法运算。
2.4 结构体
结构体是一种用户自定义的数据类型,可以包含多个不同类型的数据成员。通过结构体,可以方便地将相关的数据组合在一起,形成一个整体。
-
结构体的定义 :使用
struct
关键字定义结构体类型,并指定结构体中的成员及其数据类型。 -
声明结构体变量 :在定义结构体类型后,可以声明该类型的变量,并为其中的成员赋值。
-
访问结构体成员 :通过点号
.
操作符,可以访问结构体中的成员。例如:student1.name
表示访问student1
变量中的name
成员。 -
嵌套结构体 :可以在一个结构体中定义另一个结构体,实现更复杂的数据组织。
-
指向结构体的指针 :可以通过指针来操作和访问结构体。
2.5 枚举和联合体
枚举是一种用户定义的数据类型,用于创建一组命名的整数常量,可以明确地表示某些变量只能取特定的值。联合体是一种特殊的数据类型,允许在相同的内存位置存储不同的数据类型,可以节省内存并表示同一内存位置上的不同数据类型。
-
定义枚举/联合体类型 :使用
enum
、union
关键字定义枚举/联合体类型,并列出所有可能。 -
使用枚举/联合体变量 :声明一个枚举/联合体类型的变量,并为其赋值。
-
枚举的默认值 :如果没有显式地赋值,枚举变量的值从0开始,且每次递增1。
-
访问联合体元素 :在同一个时间点,只能访问联合体变量中的一个元素。
2.6 数据结构和算法
数据结构和算法是编程的核心,C 语言提供了多种数据结构,如链表、队列、栈等。掌握这些数据结构以及相关的算法是提高编程能力的关键。
-
基础数据结构 :如链表、队列、栈等。
-
排序算法 :如冒泡排序、选择排序、插入排序等。
-
查找算法 :如线性查找和二分查找。
-
递归在算法中的应用 :如斐波那契数列、阶乘等。
2.7 文件操作
文件操作是 C 语言中用于处理文件的手段,包括文件的打开、读取、写入和关闭等。掌握文件操作可以更好地处理和分析数据。
-
文件的打开和关闭 :使用
fopen
和fclose
函数。 -
文件的读写 :使用
fread
、fwrite
、fscanf
和fprintf
函数。 -
文件的位置指针 :使用
fseek
和ftell
函数管理文件位置。
2.8 系统编程
系统编程是使用C语言进行底层系统开发的技能,包括对操作系统、网络通信等的深入理解。掌握系统编程可以更好地理解和应用计算机系统的底层机制。
-
操作系统基础 :理解进程、线程、信号等概念。
-
网络编程 :使用套接字(sockets)进行网络通信。
-
底层I/O操作 :理解如何与硬件进行交互。
2.9 实践项目
如果只学理论,不做实际项目的话,那一定学不好 C 语言。
选择一个项目,从简单到复杂,逐步实现。例如,一个简单的文本编辑器,一个基于文件存储的数据库,或者一个简单的网络聊天程序等。这些项目可以帮助你巩固知识,并学习如何在实际开发中应用C语言。
3. 学习网站
以下网站提供了丰富的C语言学习资源,从入门教程到进阶课程,从实例演示到技术交流,应有尽有。可以根据自己的需求和兴趣选择合适的网站进行学习。
-
良许嵌入式(https://www.lxlinux.net/e/):分享丰富干货、实战项目、面试必考题,帮助快速提升技能和知识水平。
-
C语言中文网(https://c.biancheng.net/):C语言程序设计门户网站(入门教程、编程软件)。
-
菜鸟教程(https://www.runoob.com/):提供了一些C语言的教程和C的标准库,适合使用C语言编程的程序员。同时,网站中也有大量的在线实例,通过实例,可以更好地学习编程。
-
CSDN(https://www.csdn.net/):致力于为中国的软件开发者提供专业、开放、互动的学习交流平台。
4. 实用书籍
为了帮助你全面掌握C语言,我精心挑选了几本经典教材。通过阅读这些书籍,你将深入了解C语言的语法、算法和实际应用。
-
《C程序设计语言》,这是C语言圣经级别的经典之作,详细介绍了标准C语言的语法及其程序设计方法,是初学者的首选之作。
-
《C Primer Plus》,这本书是C语言入门教材的典范之作,内容全面,深入浅出,是学习C语言的必读之作。
-
《C陷阱与缺陷》,这本书是C程序员进阶之作,对C语言常见的陷阱和缺陷进行了深入的剖析,可以帮助读者避免在实际编程中遇到类似的问题。
5. 推荐课程
接下来就重磅推荐良许团队出品的 C 语言快速入门课程啦~
不仅有课程,而且还配套 答疑服务 !
-
以案例方式高效学习 C 语言,拒绝纯理论,更注重实践!
-
线下班同款,更快入门 C 语言!
-
课程经4000学员验证,口碑炸裂,随时涨价!
-
赠送课程配套资料,专属答疑群等增值服务。
课程原价 499 元,目前处于推广期, 限时 59 元 ,随时将涨回原价,欢迎大家抢购!
已经购课的小伙伴,请添加微信 sgkbc10 进群。
另外,良许团队近期还推出了另外两门优质小课。
-
Qt零基础快速入门
-
以项目方式高效学习Qt,拒绝纯理论,注重实践!
-
项目包括:记事本、串口调试助手,网络调试助手、汽车仪表盘、天气预报、智能家居等;
-
线下班同款,随时涨价,口碑炸裂!
-
赠送课程配套资料,专属答疑群等增值服务。
课程原价 399 元,目前处于推广期, 限时 99 元 ,随时将涨回原价!
-
51单片机快速入门
-
以项目方式高效学习51单片机,拒绝纯理论,注重实践!
-
项目包括:电动车报警器、感应开关盖垃圾桶、蓝牙控制灯、WiFi插座、4G模块控制灯、温湿度检测系统、智能小车、声控小车;
-
包邮赠送自研51开发板一块;
-
赠送课程配套资料,专属答疑群等增值服务
课程原价 599 元,目前处于推广期, 限时 69 元 ,随时将涨回原价!
推荐帖子