一、前言
老实说,想要将C/C++这么语言彻底学通,没有数年苦练是很难的。
因为其在过去数十年的发展中、在各行各业的应用中,积累出了各种各样的知识点与细节,需要消耗你大量的时间去踩坑,从坑中汲取到实践经验。
但对于初学者来说,却并不需要考虑太多,只要你将C/C++语言本身最基本的基础编程知识领悟、并能融会贯通,剩下的便交给时间即可。
所以文本便是要列举我认为你应该学习的知识点,这对你了解你当前的学习进度有着极大的好处。
二、基础知识点
1.变量
变量一定是最基础、且最重要的东西,是编程语言的根本,我们所编写的一切代码,其本质上都是在控制变量的数据、以达成某个目的。
2.数据类型
数据类型是用来修饰变量的,所以它同等重要。
它的本质在于,告诉编译器我们想要让某个变量拥有多大的内存、以及后续想要如何使用它。
3.函数
函数的重要性不言而喻,我们所写的第一个函数就是main
,它是程序执行的入口点。
函数的本质实际上是一种功能的拆分,将一系列数据通过指定函数计算得到结果,这可以便于团队开发。
比如你写了一个具备某个功能的函数,别人想要使用也不必去理解的函数内部是如何写的,直接传入数据,通过你的函数计算,得到最终结果即可。
4.运算
运算的重要性就不用多说了,它是最基本的内容,计算机本质上就是用来计算的,我们写程序、实际上也是在调用计算机的计算功能。
运算符是需要牢记的,最基本的加减乘除符号你得知道是通过按键盘上哪个键出来的,以及取余、自增、自减,以及一些运算符的简写,比如+=、-=等等。
最后还有或、与、非、异或等二进制运算符。
5.控制流
控制流虽然简单,但却极为重要。
因为默认程序是顺序执行的,也就是说,你写在前面的代码一定会被执行、且先于后面的代码。
而控制流却可以让我们判断某条语句当某种情况下是否需要执行,也就是选择语句,通常来说也就是if语句。
以及可以让我们重复执行代码的循环语句,通常来说也就是while语句以及for语句。
6.注释
注释是编程中非常简单、但却重要的一个模块,比如你写的某个函数拿给别人使用,如果没有注释,那你可能还需要去给对方讲一遍才行,这在团队开发中肯定是不合适的,严重影响开发效率。
7.指针
指针本身其实也是变量,只不过其内部存的是地址,它的目的是实现对内存的精确把控。
如果你想要精通C/C++,那么指针肯定是绕不开的,因为通过指针操作可以避免内存拷贝,使我们可以写出高性能的代码。
8.结构体
结构体的目的是对基本类型的再定义,你可以理解为定义一个属于我们自己的类型。
它的本质和前面的数据类型是一样的,就是告诉编译器当使用这个自定义类型定义变量时,应该分配给它多大的内存。
大多数时候,其分配的内存大小等于其内部的数据类型大小之和,但也会有因内存对齐出现需要更大内存的情况发生。
9.类
虽然如今很多新型语言已经逐渐放弃了类的概念,比如rust、go,但其目前仍然应用非常广泛。
它的本质其实是将结构体的数据、函数的方法这两者进行融合。
于是你会发现,你不仅可以通过类这种自定义类型声明变量,而且这个变量还拥有独属于自己的方法。
10.宏
我们知道,我们所写的代码是需要先经过编译器处理、编译,才能执行的。
而宏的本质,就是告诉编译器在处理的时候,完成一些我们希望让它完成的事情,完成之后再进行编译。
由于宏是在编译之前执行的,所以我们就可以实现通过宏来生成C/C++代码,比如宏函数,以及一切替换操作。
11.异常处理
异常你可以理解为错误,也就是我们所写的程序编译通过了,但在执行的时候报错了。
比如你希望别人动态输入一个数字n,然后你在程序中写上了100/n
这样的语句。
可如果别人输入的是0,那么这个语句必然会报错,正常来说会直接程序崩溃。
但我们也可以让它不崩溃,方法一就是在除n之前判断其值是否为0。
而方法二便是通过try...catch...
机制,让其报错的时候不崩溃,而是跳到catch
语句中继续执行。
12.模板
模板的作用和前面宏的作用很像,它同样是在编译器编译之前完成的,可以用来生成代码。
它比宏要强大的多,你所看到的C++中的标准库,比如vector、stack等等,都是通过模板实现的。
这样做的好处就是,只需要写一份代码,就能根据你要使用的数据类型,自动生成出对应的代码。
其本质上是在节省程序员的工作量,实际编译的代码量并不会少。
13.数据结构
数据结构是重中之重,它是编程语言的根本,无论你使用什么编程语言,数据结构都是不会变的。
常见、且最基本的几个数据结构为:栈、队列、链表、树。
其分别对应C++标准库中的实现代码为:stack、queue、list、map与set。
这些数据结构在你日后的编程生涯中是非常常用的,所以务必要牢记、且要能够熟练使用。
更详细的数据结构与算法介绍,可以参考文章:数据结构与算法