C++ DAY01
就业方向
前端开发工程师
分为B/S,C/S模式
C/S方向有两个,一个是金融方向客户端,一个是游戏方向客户端
B/S模式和C/S模式区别
B/S不需下载客户端,浏览器就是一个客户端。操作简单,传输数据不方便,系统更新较为容易。
C/S需要独立安装客户段。操作复杂,数据文件保存至本地,传输数据比较少,系统每次升级都需要重新下载资源。
后端开发工程师为主要的就业方向
大数据就业方向目前比较好的三个方向:推荐,广告,搜索,图像处理,AI。
嵌入式开发工程师
需要懂硬件(需要学会数电和模电)
C语言学习
C语言影响力
1.在所有的高级编程语言中,C语言的效率是最高的。C语言可以嵌入汇编代码
2.当今的网络世界就是建立在C语言之上的,例如操作系统(Linux全部是由C语言编写的),高性能服务器Nginx(在服务器段一统天下,完全是由C语言编写),缓存中间件(Redis全部是由C语言写的),网络协议,硬件驱动等。
3.C语言影响力后来大多数的编程语言,C++、Java(C+±-)、C#、GO、Rust
4.TIOBE指数
C语言发展历史
C语言的作者 :Dennish Ritch,Ken Thompson,
1.C语言虽然是一门高级语言,但是对硬件底层要求较高,可以操作底层硬件,而且性能非常高。但是这也有局限性,它不检查数组越界情况,而且没有try_catch机制。
2.C语言和汇编语言有比较强的对应关系。
VS基本操作
LNK0000:像这样的是链接阶段发生错误。(函数名写错了,没有包含对应的头文件,此处只能是C语言环境下出现,C++环境下暂未发现)
error C0000:编译发生错误
调试界面窗口布局
调试程序关键步骤:打断点(关键点)
内存存储单位
在计算机内部,信息都是采用二进制的形式进行存储,运算,处理和传输的。信息的存储单位有位,字节和字等几种。
基本存储单元
位(bit):二进制数中的一个数位,可以是0或1,是计算机中数据的最小单位。
字节(Byte,B):计算机中数据的基本单位,每8位组成一个字节。一个ASCII码用一个字节表示,一个汉字用两个字节表示。
字(Word):两个字节称为一个字。汉字的存储单位都是一个字。
扩展存储单位
KB:1KB=210Byte
MB:1MB=210KB
GB:1GB=210MB
在调试程序的过程中,我们可以查看内存地址。
VScode中内存窗口界面是小段表示法进行显示的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fbFf1ete-1648645301390)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220314150018828.png)]
小端表示法:低地址存放低有效位
大端表示法:高地址存放低有效位
如何生成程序
从源代码生成可执行程序包含预处理,编译,汇编和链接。
预处理:在主函数执行之前,主要处理源代码文件中以"#"开始的预编译命令。将源码文件*.c和头文件 *.h编译成一个*.i文件。
编译 :将*.i文件进行编译,然后生成一个汇编语言*.s文件。
汇编:将汇编文件*.s转换为二进制的目标代码*.o
链接:将所有的*.o文件链接成一个可执行文件。
下图为广义上的编译:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gdDzO8Ro-1648645301391)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220314151659120.png)]
下图为连接:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UkZojOJO-1648645301391)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220314151950102.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fIzhbgpK-1648645301392)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220314151507919.png)]
预处理过程
预处理指令主要分为宏定义,文件包含,条件编译等
宏定义分为两种,第一种是无参宏定义,其定义的一般形式为:
#define 标识符 字符串
其中,’#'表示一条预处理命令,'define’为宏定义命令,'标识符’为符号常量,即宏名。'字符串’可以是常数,表达式,字符串等。
第二种是带参宏定义,其定义的一般形式为:
#define 宏名(形参表)字符串
注意事项:1.整个宏函数的表达式需要用括号括住。
2.左括号应该紧贴宏函数的名称。
3.带参数的宏在定义的过程时要把每个参数都要添加括号。
4.警惕宏函数导致的多次副作用。
5.定义完备的多语句宏函数。(主要使用do…while循环)
宏定义的原理是简单的文本替换。
文件包含命令行的一般形式为:
#include"文件名"
文件是后缀名为"*.h"的头文件。文件包含命令把指定头文件插入该命令行位置取代该命令行,从而把指定文件和当前源程序文件连接成一个源文件。原理是将对应头文件的内容copy到对应的位置。
带参数的宏定义分行的话,加一个反斜杠
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OsP3xMt8-1648645301392)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220314155931621.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ma9bErsx-1648645301393)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220314160713059.png)]
宏函数相较于普通函数优点在于以下几个方面:
1.宏函数在预处理阶段时展开,只占用编译时间,函数调用会占用运行时间(分配单元,保存寄存器的值,值传递,保存下一条指令的地址,返回),每次执行都要载入,所以执行相对宏较慢。
2.在函数调用时,先求出实参表达式的值,然后带入形参。而使用带参的宏只是简单的字符替换,执行效率较高。
3.函数调用是在程序运行时处理的,分配临时的内存单元;宏展开是在编译时进行的,在展开时不分配内存单元,不进行值传递。
编译
把C语言源代码翻译成汇编代码。godbolt
汇编和链接
汇编将汇编语言翻译成机器语言,生成目标文件。
链接将库函数文件和操作系统的引导代码以及目标文件链接在一起,生成可执行文件。
进程的虚拟内存空间(重点)
进程:进程是程序的基本执行实体,是线程的容器,是正在运行的程序。
进程的虚拟内存空间包含内核,栈,堆,数据段,代码段。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ut1MxTkd-1648645301394)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220314163004093.png)]
变量和常量
变量:在程序运行期间可以发生改变的量。变量的本质就是一块内存空间。
思考:
1.如何引用这块内存区域?通过变量名引用。
2.这块内存区域有多大?以及如何解释这片内存区域的数据?通过变量类型
3.这片内存区域表示怎样的数据?通过值的概念进行解释。
变量的三要素:变量名,变量类型,值。
常量:在程序的执行期间不可以发生改变的量。
常量表达式:在编译期间可以直接求值的表达式。(constexpr)
常量和常量表达式之间的区别?
常量表达式可以用于指定数组的长度,还可以用于switch语句的标签
标识符和关键字
标识符(identifer):为变量,宏,函数等起的名字。
关键字:对C语言有特殊意义的名称,称为关键字。
规则:1.标识符中只能包含字母,数字和下划线
2.不能以数字开头
规范:单词与单词之间以下划线分割。驼峰。好的标识符,见名知义
注意事项:1.标识符是区分大小写的
2.标识符与关键字不能冲突。
格式化输入和输出
计算机包含哪几个部分
冯·诺伊曼体系结构(存储程序型计算机):输入设备,运算器,存储器,控制器,输出设备
最简单的计算机包含:输入设备、运算器、输出设备
输入和输出模型(重点)
核心矛盾:CPU,内存,I/O设备在处理数据时存在速度差异
比喻:CPU一天,内存一年(10**2);内存一天,I/O十年(10**3)
cpu,内存:高速缓存(cache)
内存,I/O设备:缓冲区(buffer),缓存(Radis)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Yp3q9fi-1648645301395)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220314174322640.png)]
体系结构(存储程序型计算机):输入设备,运算器,存储器,控制器,输出设备
最简单的计算机包含:输入设备、运算器、输出设备
输入和输出模型(重点)
核心矛盾:CPU,内存,I/O设备在处理数据时存在速度差异
比喻:CPU一天,内存一年(10**2);内存一天,I/O十年(10**3)
cpu,内存:高速缓存(cache)
内存,I/O设备:缓冲区(buffer),缓存(Radis)
[外链图片转存中…(img-6Yp3q9fi-1648645301395)]