![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
记录一下C语言中的难点
傻童:CPU
业精于勤,荒于嬉;行成于思,毁于随。
展开
-
C语言实现CRC校验
按照字节分段进行CRC-32计算,字节放在寄存器的低字节,因此字节最低位在左高由低的最右边一位,在进行CRC计算过程时,要从最低位/最右侧位置开始判断,移位时向右移出。最后的CRC寄存器中的内容,就是最后的效验值,将其附加在数据帧的最后一个数据之后,并保持低8位在前,高8位在后的放置。将CRC寄存器右移1位,并检测移出的最低位是否为1,如果最低位为1,则将CRC寄存器与固定数0xA001异或。首先,确定所使用的CRC算法和参数(比如CRC-16、CRC-32等)以及多项式(生成多项式)的值。原创 2023-09-28 15:21:55 · 1836 阅读 · 0 评论 -
C语言之双向链表
如果删除第一个结点,则保存链表首地址的指针保存后一个结点的地址,并且让这个结点的front保存NULL。如果删除最后一个结点,只需要让最后一个结点的前一个结点的next保存NULL即可。如果删除中间结点,则让中间结点的前后两个结点的指针域分别保存对方的地址即可。如果链表为空,则不需要删除。原创 2023-09-17 21:39:17 · 336 阅读 · 0 评论 -
C语言之链表
先对比第一个结点的数据域是否是想要的数据,如果是就直接返回,如果不是则继续查找下一个结点,如果到达最后一个结点的时候都没有匹配的数据,说明要查找数据不存在。如果删除的是中间结点,则找到中间结点的前一个结点,让前一个结点的指针域保存这个结点的后一个结点的地址即可。交换之后,拿新的第一个结点的数据域与下一个结点再次对比,如果比他小,再次交换,依次类推。如果删除的是第一个结点,则需要将保存链表首地址的指针保存第一个结点的下一个结点的地址。数据域:存放各种实际的数据,如:num、name等。原创 2023-09-17 20:55:54 · 307 阅读 · 2 评论 -
C语言之const
如果const既修饰指针变量的类型,又修饰指针变量,则只能通过原本变量修改值。如果const修饰指针变量的类型,无法通过指针变量修改地址里面的值。如果const修饰指针变量,无法修改指针变量保存的地址。如果使用全局变量的地址修改值,运行时程序异常结束。如果直接拿全局变量修改值,编译直接报错。不能直接通过变量进行修改值,编译报错。此时全局变量只能使用但是不能修改,可以通过变量的地址修改值。原创 2023-09-15 22:46:04 · 378 阅读 · 0 评论 -
动态内存申请
注意:malloc calloc relloc 动态申请的内存,只有在free或程序结束的时候才释放。int a [10]注意当free后,因为没有给p赋值,所以p还是指向原先动态申请的内存。内存已经不能再用了,p变成野指针了,所以一般为了放置野指针,会free完毕之后对p赋。3、使用malloc开辟空间需要保存开辟好的空间的首地址,但是由于不确定空间用于做。2、如果多次malloc申请的内存,第1次和第2次申请的内存不一定是连续的。在堆中申请了3块,每块大小为100个字节,即300个字节连续的区域。原创 2023-09-07 18:44:24 · 246 阅读 · 0 评论 -
函数指针-C
/返回值类型 (*函数指针变量名)(形参列表)//定义了一个函数指针变量pint max(int x,int y){}//定义一个整形函数p=max;//用p存放函数的地址调用函数的方法通过函数名字取去调用函数int main()int num;return 0;通过函数指针变量去调用int main()int num;p = max;return 0;函数指针最常用的是:将一个函数作为参数传递给另一个函数。这个函数称为回调函数。return x+y;原创 2023-09-07 18:12:14 · 237 阅读 · 0 评论 -
结构体——联合体
【代码】结构体——联合体。原创 2023-08-30 10:41:53 · 191 阅读 · 0 评论 -
static的使用
2.修饰函数:使用static关键字声明的函数是静态函数,它们的作用域被限制在定义它们的源文件中,它们不能被其他文件中的函数调用。1.修饰变量:使用static关键字声明的变量是静态变量,它们的作用域被限制在定义它们的源文件中,它们的生命周期从程序开始运行到程序结束。3.修饰代码块:使用static关键字声明的代码块被称为静态代码块,它们只会在第一次使用它们的时候被执行一次,之后不会再次执行。· 生命周期:静态全局变量的生命周期与程序的执行周期相同,但它们只在声明它们的源文件中可见,不能被其他源文件访问。原创 2023-08-22 12:02:14 · 207 阅读 · 0 评论 -
C语言优化的方法
如果函数过多的使用全局变量,比较好的做法是拷贝全局变量的值到局部变量,这样它才可以存放在寄存器。在if(a>10 && b=4)这样的语句中,确保AND表达式的第一部分最可能较快的给出结果(或者最早、最快计算),这样第二部分便有可能不需要执行。编译器不能将全局变量的值缓存在寄存器中,但这在使用全局变量时便需要额外的(常常是不必要的)读取和存储。使用引用值的方式传递结构数据,也就是说使用指针,否则传递的数据会被拷贝到栈中,从而降低程序的性能。内联函数的缺陷是如果调用的地方很多,代码的体积会变得很大。原创 2023-07-25 11:41:47 · 362 阅读 · 0 评论 -
常见面试题--嵌入式C语言
嵌入式面试原创 2023-07-23 21:41:39 · 144 阅读 · 0 评论 -
函数-嵌入式C语言
值传递地址传递。原创 2023-07-23 21:05:13 · 320 阅读 · 0 评论 -
内存分布--嵌入式C语言
【代码】内存分布--嵌入式C语言。原创 2023-07-22 23:10:55 · 169 阅读 · 0 评论 -
数组-嵌入式C语言
数组原创 2023-07-22 22:25:31 · 141 阅读 · 0 评论 -
内存空间的使用--嵌入式C语言
总结:指针是一个存放地址的空间,空间大小为4个字节,当指针指向一段内存的首地址时,一次读取多少字节,取决定义指针的大小类型,比如char *p就是一次性读取一个字节,int *p就是一次性读取4个字节。原创 2023-07-22 17:24:13 · 106 阅读 · 0 评论 -
位运算-嵌入式C语言
不需要用到第三个变量。原创 2023-07-22 09:05:24 · 121 阅读 · 0 评论 -
类型修饰符-嵌入式C语言
对内存资源存放位置的限定。资源属性中位置的限定。原创 2023-07-20 22:38:13 · 124 阅读 · 0 评论 -
数据类型及关键字-嵌入式C
sizeof 和 returncharintunsigned 和signedfloat和doublesturctunionenumtypedef原创 2023-07-19 23:20:52 · 106 阅读 · 0 评论 -
宏下开展的#,##
【代码】宏下开展的#,##原创 2023-07-19 12:57:04 · 305 阅读 · 0 评论 -
C语言实现状态机
2.根据状态表、事件、动作表定位相应的动作处理函数。1.建立相应的状态表和动作查询表。3.执行完之后在进行状态的切换。原创 2023-07-15 13:46:47 · 1057 阅读 · 0 评论 -
各种数据类型与零值的比较方式
float 变量与“零值”进行比较。bool 变量与“零值”进行比较。指针变量与“零值”进行比较。原创 2023-03-19 09:53:12 · 250 阅读 · 0 评论 -
2个8bit合并成1个16字节
小端模式(Little Endian):数据的高字节,保存在内存的高地址中;数据的低字节,保存在内存的低地址中。大端模式(Big Endian):数据的高字节,保存在内存的低地址中;数据的低字节,保存在内存的高地址中。首先需要明确,你是想将这2个8bit是大端储存成1个16bith,还是小端存储。不同点:小端模式是从高地址往低地址方向读;大端模式是从低地址往高地址方向读。相同点:都是从低地址项高地址上写。原创 2023-02-16 19:56:13 · 2099 阅读 · 0 评论 -
C语言进阶-链表
链表原创 2023-01-02 22:26:00 · 456 阅读 · 0 评论 -
C语言进阶-可变数组
可变数组原创 2023-01-02 22:03:55 · 463 阅读 · 0 评论 -
C语言进阶-联合体
联合体原创 2023-01-02 20:09:22 · 767 阅读 · 0 评论 -
结构体与函数
结构体原创 2023-01-02 19:59:15 · 490 阅读 · 0 评论 -
C语言进阶-结构体
结构体原创 2022-12-28 23:05:55 · 406 阅读 · 0 评论 -
C语言进阶-枚举
枚举原创 2022-12-28 22:49:12 · 552 阅读 · 0 评论 -
C语言进阶-字符
【代码】C语言进阶-字符。原创 2022-12-27 22:54:24 · 560 阅读 · 0 评论 -
C语言进阶-动态内存分配
【代码】C语言进阶-动态内存分配。原创 2022-12-27 22:17:09 · 547 阅读 · 0 评论 -
C语言进阶-指针运算
【代码】C语言进阶-指针运算。原创 2022-12-27 21:46:26 · 520 阅读 · 0 评论 -
C语言进阶-指针与数组
q可以改变指向的内容,但不能改变指向的地址。p可以改变指向地址,但不能改变指向内容。原创 2022-12-26 23:11:41 · 437 阅读 · 0 评论 -
C语言的进阶-指针的应用
我们运算可能会出错,我们需要将结果通过另外的方式返回出来。可以通过参数返回多个值,参数需要使用指针。函数只能返回一个值!原创 2022-12-26 22:53:13 · 416 阅读 · 0 评论 -
C语言函数变量的引用
有时候,你想引用函数中的某些变量。原创 2022-12-26 21:39:58 · 871 阅读 · 0 评论 -
C指针的理解
指针 (编程语言中的一个对象):指针也就是内存地址,指针变量是用来存放内存地址的变量,在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。定义变量a的时候,计算机会给a开辟一个内存空间,这个内存空间就是a的地址。比如为0xA0。内存中存放的是3这值。定义指针的时候,计算机也会给p开辟一个内存空间,比如内存地址为0XB0。p=&a表示将a的地址赋给指针,存放在指针的内存中。也就是把一个内存地址放在内存空间里,并不是一个数字或者原创 2022-06-08 15:26:28 · 192 阅读 · 0 评论