C&C++
文章平均质量分 82
本专栏用于学习C语言
指针到处飞
努力成为抽象派
展开
-
C++万字自学笔记
C++万字入门级自学笔记原创 2023-07-10 19:07:37 · 43232 阅读 · 43 评论 -
C语言程序生命周期
可能大家都知道一个C语言程序需要经过编译生成可执行文件就可以运行起来,但是这并非是一个完整的C语言程序流程,下面我们就详细了解一下C语言程序的整个生命周期。原创 2023-06-30 20:50:11 · 876 阅读 · 1 评论 -
认识GCC
GNU是Linux系统下的一些工具包,GNU是GNU is Not Unix的缩写,因为当年Unix收费后,理查德·马修·斯托曼打算做一套GNU操作系统,当时GNU的工具包已经写好,就差内核即可组装成一个完整的操作系统,正好Linus写了一个内核,所以两者合并发布了GNU/Linux,后来传着传着就省略了名字前面的一部分,成为Linux。gcc是一个交叉平台编译器,比如交叉编译器gcc-arm 适合在嵌入式领域的开发编译。我的理解:GNU就是Linux系统中的一些工具包。使用wc命令查看两个文件的大小。原创 2023-06-30 20:19:41 · 342 阅读 · 0 评论 -
C语言中的全局、静态、局部变量
BSS段在可执行文件中会占据一定的空间,但在文件被加载到内存时,操作系统会自动将BSS段中的数据初始化为零或空值。需要注意的是,如果局部变量被声明为静态(static)变量或带有 static 限定符,它们的存储位置将不再是栈,而是存储在静态数据段中。在 C 语言中,未初始化的全局变量和局部变量的初始值是不确定的,它们的值取决于所分配的内存区域的内容。对于局部变量,未初始化的局部变量的初始值是未定义的。因此,通常情况下,未初始化的全局变量会放置在BSS段,已初始化的全局变量会放置在数据段。原创 2023-04-28 15:58:05 · 2634 阅读 · 0 评论 -
STM32学习笔记-SPI
通过写 SPI 的“本成员设置 SPI 的通讯方向,可设置为双线全双工 (SPI_Direction_2Lines_FullDuplex),双线只接(SPI_Direction_2Lines_RxOnly),单线只接收 (SPI_Direction_1Line_Rx)、单线只发送模式(SPI_Direction_1Line_Tx)。这是 SPI 的 CRC 校验中的多项式,若我们使用 CRC 校验时,就使用这个成员的参数 (多项式),来计算 CRC 的值。CHPA:时钟相位,CHPA=0,奇数边沿采样。原创 2023-03-01 18:21:24 · 966 阅读 · 0 评论 -
C语言查漏补缺(进阶)volatile、__attribute__、void*、地址对齐、$$Super$main
最近在学习RT-Thread,在看其源码的时候发现了许多自己不太了解的C语言知识点,在此查漏补缺一下。原创 2023-03-01 13:33:01 · 1320 阅读 · 1 评论 -
STM32学习笔记-I2C通信协议
两根通信线SCL(时钟线)、SDA(数据线)同步半双工,支持总线挂载多设备。原创 2023-02-26 19:52:04 · 4429 阅读 · 1 评论 -
Makefile&CMake
今天本打算学习C++中的内存模型,以便于更加深入地了解程序的运行过程,但是在看书的过程中遇到了变量的链接性问题,本想写个程序试一试变量的链接性问题,结果发现不会写CMake,在网上查找CMake的资料后又发现了CMake和makefile这个是类似的,心想不如一起学了。然后在此总结一下。一个C程序要想从代码变为可执行的文件,需要经过两个过程:、,一般我们在windows开发环境下使用Visual Studio,CLion等IDE(集成开发环境)时,编译器会自动执行这两步命令,无需经过复杂的操作,这也是IDE原创 2022-11-29 19:04:35 · 1081 阅读 · 0 评论 -
C++Vector和deque容器
动态扩展并不是在原有的空间进行扩展,而是新建一个比原来更大的空间,空间的大小由vector内部的算法确定。如果vector要存放的数据比较多,可以直接预留足够的空间,不用一次次地动态扩展,影响性能。与数组类似,但是数组是固定长度,vector是长度可变的,可以动态扩展的。作用:提前预留空间,减少动态扩展容量时的扩展次数。vector是STL中最常用的一种数据结构。deque是一个双端数组,可对头端进行插入。reserve只预留空间不初始化数据。利用算法实现deque内部数据的排序。原创 2022-11-23 21:20:52 · 649 阅读 · 0 评论 -
C++String类常用函数总结
string是C++中用于管理字符的一个类本质上字符在string类中是char *类型的变量,只不过被封装成了一个类,这个类中重载了很多运算符,使其像个数组一样。下面总结了一些string类的函数和重载的运算符原创 2022-11-22 21:21:18 · 2159 阅读 · 0 评论 -
指针数组和数组指针,指针常量和常量指针
没有()的情况下parr先与[]结合,parr成为一个数组,加了()之后p优先与*结合成为一个指针,再加上[]之后成为一个指针数组。从右往左看,*p代表p是一个指针变量,int代表这个指针类型为int,const修饰的是*p,所以指向的值是一个常量。从右往左看,p是一个变量名,然后使用const修饰成为一个常量,加。指针常量的本质为一个常量,并且用指针来修饰它,所以指针是个常量。指针数组本质是一个数组,里面存放的是指针。数组指针本质是一个指针,一个指向数组的指针。常量指针本质是一个指针,指向常量的指针。原创 2022-11-08 17:33:44 · 194 阅读 · 0 评论 -
【算法入门系列】冒泡排序
冒泡排序的基本思路是最后面的元素开始,对每两个相邻的关键字进行比较,且使关键字较小的元素换至关键字较大的元素之前,使得一趟冒泡排序后关键字最小的元素到达最上端, 接着,在剩下的元素中找关键字次小的元素,并把它换到第二个位置上,遍历n-1趟之后整个数组变为有序的。写在结尾: 冒泡排序是我认识的第一个算法,大约是两年前的事了,当时学的时候还是懵懵懂懂,在经历了这么久的沉淀之后我惊奇的发现我竟然还没有忘,仔细想想原因应该是自己对算法的理解程度加深导致的。输入:5,4,3,2,1。输出:1,2,3,4,5。...原创 2022-08-13 17:41:48 · 295 阅读 · 2 评论 -
scanf函数详解
C库包含多个输入输出函数,scanf是其中一个比较常用的,因为scanf可以读取不同格式的数据。输入函数除了scanf之外还有fgets、getcahr。printf()函数与scanf()函数是C语言中较为常用的输入输出函数,因为这两个函数的参数是不确定的,编译器也没有办法进行检查,因此用的时候挺容易报错,下面就总结一下scanf()函数的用法。...原创 2022-08-26 19:58:59 · 5169 阅读 · 0 评论 -
printf()转换字符总结
原本以为C语言中的转换字符并没有多少,今天深入了解之后发现我还是年轻了,因此整理下来以供参考。!!printf()函数中的转换字符在计算机中的作用是把原先在计算机中存储的二进制数据转换成相应的形式展现出来,以下列举了printf()函数中的转换字符。转换字符输出%a或A浮点型、十六进制、p计数法%cchar型,单个字符%dint型%e或E科学计数法(e计数法)输出浮点型%f浮点型%g或G根据值的不同,自动选择%f或%e%e用于指数小于-4或者大于等于其精度时%i。...原创 2022-08-24 21:13:30 · 684 阅读 · 5 评论